8

当一个应用程序进程启动一个 XPC 辅助进程时,它实际上并没有以经典的 UNIX 风格执行 fork()/exec() 本身。相反,它会向 launchd 发送一条消息,后者会为它做脏活。因此,如果您在 XPC 进程上查询父进程,它会作为 launchd 进程返回。

但是,如果您在分层进程视图中打开 Activity Monitor,则 XPC 帮助进程都显示在请求它们的原始应用程序下方,例如:

Safari 的 XPC 助手示例,显示启动为父进程

在我正在开发的软件中,了解进程之间的这种关系将非常有用。到目前为止,我们一直在使用常规的 BSD 父进程信息,但是随着一切都朝着 XPC 发展,这不再有用了。

所以:

  • XPC 进程的“原始”父进程信息存储在哪里?
  • 活动监视器如何访问它?

涉及到一个 kext,所以我很乐意直接在内核而不是用户空间中提取这些信息,但我似乎什至无法弄清楚它的存储位置。

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

4

1 回答 1

0

我想 launchd 知道你在找什么。

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

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

于 2014-06-17T09:53:49.177 回答