我想了解运行进程的上下文。我想区分以下几种情况:
- 它作为持久计划任务(launchDaemon/launchAgent(运行
- 它是按需调用的,由launchd使用
open
命令行或双击创建 - 它是直接从命令行终端调用的(即来自终端的
> /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和一堆反向技巧。
我可以在这里建议关于这个主题的开放资源