6

Mac OS Xで、引数に基づいて特定のプロセスがいつ実行されているかを特定しようとしています。同じ名前で実行されているプロセスが複数ある場合がありますが、探している引数は1つだけです。プロセスは、私のコードを実行するのと同じユーザーによって所有されていません。argvを変更することはありません。

'ps'コマンドは、必要な情報を正確に表示します。しかし、「ps」を生成してその出力を解析する必要がないことを強く望んでいます。

私はもともとsysctlを使用してこの質問の解決策を試しましたが、自分が所有するプロセスに対してのみ機能することがわかりました。詳細については、他の質問を参照してください。

では、psは他のユーザーが所有するプロセスのargv情報をどのように取得するのでしょうか。

4

2 に答える 2

5

BSD ps(Mac OS Xで使用)はkvm_getargv()、プロセスのコマンドライン引数を取得するために使用します。

実際の呼び出しは次のとおりです。psソースコード。を検索しkvm_getproc2ます。

この関数ファミリーについては、OpenBSDのマニュアルページを参照してください。

于 2010-04-02T20:38:44.110 に答える
5

Mac OS Xでは、psはsetuid 0です。これは、すべてのプロセスの情報を取得する方法です。その情報を取得するにはrootとして実行する必要があるため、setuid 0にするか、sudoを使用してユーティリティを実行する必要があります。

最善の方法は、実際には必要がない場合でも、psを生成して出力を解析することです;)

于 2010-04-02T20:53:52.127 に答える