8

アプリケーション プロセスが XPC ヘルパー プロセスを起動するとき、従来の UNIX スタイルでは実際には fork()/exec() 自体を実行しません。代わりに、launchd にメッセージを送信します。したがって、XPC プロセスで親プロセスを照会すると、launchd プロセスとして返されます。

ただし、階層プロセス ビューでアクティビティ モニターを開くと、XPC ヘルパー プロセスはすべて、それらを要求した元のアプリケーションの下に表示されます。次に例を示します。

親プロセスとして launchd を表示する Safari の XPC ヘルパーの例

私が取り組んでいるソフトウェアでは、プロセス間のこの関係を知ることは非常に役立ちます。これまでのところ、通常の BSD 親プロセス情報を使用してきましたが、すべてが XPC に移行するにつれて、これはあまり役に立ちません。

そう:

  • XPC プロセスの「元の」親プロセス情報はどこに保存されますか?
  • Activity Monitor はどのようにアクセスしますか?

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 に答える