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

但是,如果在分层过程 View 中打开“事件监视器”,则XPC帮助程序都显示在请求它们的原始应用程序的下方,例如:

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

所以:

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

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

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

    最佳答案

    我想这个发布会知道您在寻找什么。

    服务管理框架提供了一种可以轻松为您提供所需内容的方法。
    CFDictionaryRef SMJobCopyDictionary(CFStringRef domain, CFStringRef jobLabel);函数。

    10-01 09:30