どのようにPSは、Mac OS X上のすべてのプロセスのためのargvを示していますか?
質問
私は、同じ名前で実行されているいくつかのプロセスがあるかもしれないのMac OS X上で、その引数に基づいて、特定のプロセスが実行されているときを識別しようとしているが、一つだけは私が探しているの引数を持つことになります。プロセスは、私のコードを実行されるのと同じユーザーが所有していません。彼らはどのような方法で自分のargvを変更したことはありません。
「psの」コマンドのショーは正確な情報私は必要があること。しかし、私は大いに生む「PS」に持っているし、その出力を解析したくない。
私はもともとこの質問から解決策を試してみました>、sysctlのを使用して、それだけであなたが所有するプロセスのために働くことが判明。 詳細は私の他の質問を参照してください。
それでは、どのようにPS?他のユーザーが所有するプロセスのためのargv情報を入手ん。
解決
マックOS X PSに
それはすべてのプロセスの情報を取得する方法である、0 setuidのです。あなたは0をsetuidのことか、sudoをして、あなたのユーティリティを実行する必要があるので、どちらか、その情報を取得するには、rootとして実行する必要があります。
最善の方法は、あなたが本当にしたくない場合でも、ちょうど卵PSにある可能性があり、出力を解析;)
他のヒント
BSD ps
する(Mac OS Xで使用される)プロセスのコマンドライン引数を取得するためにkvm_getargv()
を使用します。
ここでは、実際の呼び出しは次のとおりです。 psのソースコードする。 kvm_getproc2
を検索します。
を参照してください。のOpenBSD機能のこのファミリーのmanページます。
所属していません StackOverflow