"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に相当するものはありますか?つまり、プロセス情報を簡単に取得するためのファイルベースのメカニズムはありますか?
代わりにこれを試してください:
ps ax -o pid、cmd
必要に応じて再フォーマットできます(詳細については、manページを参照してください)。
最後に、ps(およびcat/proc/*/cmdline)は、コマンドが起動された方法でコマンドを報告すると思います。したがって、フルパスが指定されていない場合は、「/ path/to/command」ではなく「command」として表示されます。
まず、プロセスはps
によって報告されるタイトルを変更する可能性があるため、それ自体はあまり信頼できません。 'e'フラグを使用して環境変数を試すことができます。
ps auxwwwe
これらの中に、ここで説明するように組み込みの「_」変数が含まれている必要があります。
シェルの子として実行されるすべてのコマンドについて、shはこの変数を実行可能ファイルのフルパス名に設定し、この値を環境を介してその子プロセスに渡します。
これは、Linuxと同様にBSD上のshにも当てはまります。これはユーザーが上書きすることはできないと思います。ただし、可用性はユーザーのシェルの選択に依存する可能性があり、かなり厄介で、YMMVです。
OSXにはネイティブprocfsがありません。 Fuseをベースにしたポートがあります。詳細は ここ で見つけることができます。再びYMMV。
/ procからすべてのプロセスIDとフルパスを抽出します。
ls -l /proc/*/exe 2>/dev/null | awk '{print $8 " " $10}'
psをいじるのをやめて、cat/proc/pid/cmdlineを使用します。
/ proc/*/cmdlineなどのワイルドカードを使用できます。