web-dev-qa-db-ja.com

psauxwww出力で実行可能ファイルのフルパスを取得する

"ps auxwww"出力の次の行を考えてみます。

USER       PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
root      4262   0.0  0,1    76592   1104 s005  Ss   10:02am   0:00.03 login -pf yo
yo        4263   0.0  0,0    75964    956 s005  S    10:02am   0:00.03 -bash

質問1: psにCOMMAND列のすべてのコマンドを完全修飾パス名に展開させるにはどうすればよいですか?ログインを/ usr/bin/loginに解決し、bashを/ bin/bashに解決したい。

質問2: MacOS Xのprocfsに相当するものはありますか?つまり、プロセス情報を簡単に取得するためのファイルベースのメカニズムはありますか?

3
knorv

代わりにこれを試してください:

ps ax -o pid、cmd

必要に応じて再フォーマットできます(詳細については、manページを参照してください)。

最後に、ps(およびcat/proc/*/cmdline)は、コマンドが起動された方法でコマンドを報告すると思います。したがって、フルパスが指定されていない場合は、「/ path/to/command」ではなく「command」として表示されます。

6
DictatorBob

まず、プロセスはpsによって報告されるタイトルを変更する可能性があるため、それ自体はあまり信頼できません。 'e'フラグを使用して環境変数を試すことができます。

ps auxwwwe

これらの中に、ここで説明するように組み込みの「_」変数が含まれている必要があります。

シェルの子として実行されるすべてのコマンドについて、shはこの変数を実行可能ファイルのフルパス名に設定し、この値を環境を介してその子プロセスに渡します。

これは、Linuxと同様にBSD上のshにも当てはまります。これはユーザーが上書きすることはできないと思います。ただし、可用性はユーザーのシェルの選択に依存する可能性があり、かなり厄介で、YMMVです。


OSXにはネイティブprocfsがありません。 Fuseをベースにしたポートがあります。詳細は ここ で見つけることができます。再びYMMV。

4
Dan Carley

/ procからすべてのプロセスIDとフルパスを抽出します。

ls -l /proc/*/exe 2>/dev/null | awk '{print $8 " " $10}'
0
Klaus Hartnegg

psをいじるのをやめて、cat/proc/pid/cmdlineを使用します。

/ proc/*/cmdlineなどのワイルドカードを使用できます。

0
kmarsh