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

pmd*_*mdj 7 macos xpc launchd

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

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

Safari的XPC助手示例,将launchd显示为父进程

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

所以:

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

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

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

Ric*_* H. 0

我想 launchd 知道你在寻找什么。

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

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

  • 我认为 SMJobCopyDictionary 在这里没有帮助。如您所见,这些是 Safari 字典中的条目:http://pastebin.com/QAgDEUim (2认同)