当一个应用程序进程启动一个 XPC 辅助进程时,它实际上并没有以经典的 UNIX 风格执行 fork()/exec() 本身。相反,它会向 launchd 发送一条消息,后者会为它做脏活。因此,如果您在 XPC 进程上查询父进程,它会作为 launchd 进程返回。
但是,如果您在分层进程视图中打开 Activity Monitor,则 XPC 帮助进程都显示在请求它们的原始应用程序下方,例如:
在我正在开发的软件中,了解进程之间的这种关系将非常有用。到目前为止,我们一直在使用常规的 BSD 父进程信息,但是随着一切都朝着 XPC 发展,这不再有用了。
所以:
- XPC 进程的“原始”父进程信息存储在哪里?
- 活动监视器如何访问它?
涉及到一个 kext,所以我很乐意直接在内核而不是用户空间中提取这些信息,但我似乎什至无法弄清楚它的存储位置。
更新:关于 Apple 的darwin-kernel邮件列表的讨论:http: //lists.apple.com/archives/darwin-kernel/2015/Mar/msg00001.html