アプリケーション プロセスが XPC ヘルパー プロセスを起動するとき、従来の UNIX スタイルでは実際には fork()/exec() 自体を実行しません。代わりに、launchd にメッセージを送信します。したがって、XPC プロセスで親プロセスを照会すると、launchd プロセスとして返されます。
ただし、階層プロセス ビューでアクティビティ モニターを開くと、XPC ヘルパー プロセスはすべて、それらを要求した元のアプリケーションの下に表示されます。次に例を示します。
私が取り組んでいるソフトウェアでは、プロセス間のこの関係を知ることは非常に役立ちます。これまでのところ、通常の BSD 親プロセス情報を使用してきましたが、すべてが XPC に移行するにつれて、これはあまり役に立ちません。
そう:
- XPC プロセスの「元の」親プロセス情報はどこに保存されますか?
- Activity Monitor はどのようにアクセスしますか?
kext が関係しているので、この情報をユーザー空間ではなくカーネルで直接取得できれば幸いですが、それがどこに保存されているかさえわからないようです。
更新: Apple のdarwin-kernelメーリング リストでのディスカッション: http://lists.apple.com/archives/darwin-kernel/2015/Mar/msg00001.html