OSX活动监视器如何将XPC任务与其启动器进程相匹配?

时间:2014-06-17 09:44:01

标签: macos launchd xpc

当应用程序进程启动XPC帮助程序进程时,它实际上并不以经典的UNIX样式执行fork()/ exec()本身。相反,它向launchd发送一条消息,它为它做了肮脏的工作。因此,如果您在XPC进程上查询父进程,它将作为launchd进程返回。

但是,如果在分层流程视图中打开活动监视器,则XPC帮助程序进程将显示在请求它们的原始应用程序下方,例如:

Example of XPC helper for Safari showing launchd as parent process

在我正在研究的软件中,了解这些过程之间的关系非常有用。到目前为止,我们一直在使用常规的BSD父进程信息,但随着一切都向XPC发展,这已不再适用了。

所以:

  • 为XPC流程存储的“原始”父流程信息在哪里?
  • Activity Monitor如何访问它?

有一个kext,所以我很乐意在内核而不是用户空间中直接提取这些信息,但我似乎无法弄清楚它存储在哪里。

更新:讨论Apple的 darwin-kernel 邮件列表:http://lists.apple.com/archives/darwin-kernel/2015/Mar/msg00001.html

1 个答案:

答案 0 :(得分:0)

我认为launchd知道你在寻找什么。

服务管理框架有一种方法可以轻松地为您提供所需的内容。

CFDictionaryRef SMJobCopyDictionary(CFStringRef domain, CFStringRef jobLabel);功能。