当应用程序进程启动XPC帮助程序进程时,它实际上并不以经典的UNIX样式执行fork()/ exec()本身。相反,它向launchd发送一条消息,它为它做了肮脏的工作。因此,如果您在XPC进程上查询父进程,它将作为launchd进程返回。
但是,如果在分层流程视图中打开活动监视器,则XPC帮助程序进程将显示在请求它们的原始应用程序下方,例如:
在我正在研究的软件中,了解这些过程之间的关系非常有用。到目前为止,我们一直在使用常规的BSD父进程信息,但随着一切都向XPC发展,这已不再适用了。
所以:
有一个kext,所以我很乐意在内核而不是用户空间中直接提取这些信息,但我似乎无法弄清楚它存储在哪里。
更新:讨论Apple的 darwin-kernel 邮件列表:http://lists.apple.com/archives/darwin-kernel/2015/Mar/msg00001.html
答案 0 :(得分:0)
我认为launchd知道你在寻找什么。
服务管理框架有一种方法可以轻松地为您提供所需的内容。
CFDictionaryRef SMJobCopyDictionary(CFStringRef domain, CFStringRef jobLabel);
功能。