macOS:程序化检查进程是否作为launchDaemon或launchAgent或从命令行运行



我想了解运行进程的上下文。我想区分以下几种情况:

  1. 它作为持久计划任务(launchDaemon/launchAgent(运行
  2. 它是按需调用的,由launchd使用open命令行或双击创建
  3. 它是直接从命令行终端调用的(即来自终端的> /bin/myProg(

也许有任何关于使用Objective-c/swift框架或任何其他方式的过程上下文的指示吗?我希望避免在这里发明轮子:-(

感谢

显然没有简单的公共API或框架可以做到这一点,而且做这件事很难。

此信息的某些部分可能可以通过您的流程来检索,这些部分辅助方式将在一些系统版本上工作:

  • 有一个基于launchctl C的API,您可以尝试使用它来枚举所有启动daemon/agent任务并搜索您的应用程序路径/pid。你可以为此,您的进程需要根权限。

  • 使用open命令行有时可以跟踪环境它为您的流程设置的变量。

  • 直接从命令行运行可能会使responsible_pid正确填充(这是libinsulate的专用API,除非您在从11.smth版本开始的Endpoint Security中观察到它(

除了launchctl API之外,所有这些东西都不是公共的,不可靠,可能随时被苹果破坏,可能不足以满足您的需求。

但值得一试,因为没有什么比这更好的了:(

您可以使用系统事件监控将您想要的所有情况与您控制的其他(根允许的(进程区分开来,可能采用Endpoint Security Framework(需要苹果授权,不能通过AppStore分发(,调用许多私有API和一堆反向技巧。

我可以在这里建议关于这个主题的开放资源

相关内容

  • 没有找到相关文章

最新更新