回答:
プロセスのバイナリの場所を得るための一つの方法は、使用することですlsof
し、grep
最初のためtxt
のセグメント。たとえば、シェルで、シェルがどのバイナリであるかを確認するには、の代わりにシェルのPIDを使用します$$
。
$ lsof -p $$ | grep txt
bash 78228 blair txt REG 14,2 1244928 6568359 /bin/bash
bash 78228 blair txt REG 14,2 1059792 23699809 /usr/lib/dyld
bash 78228 blair txt REG 14,2 136368128 81751398 /private/var/db/dyld/dyld_shared_cache_i386
シェルが使用していることがわかり/bin/bash
ます。
この手法は、プロセスが絶対パスまたは相対パスを使用して起動された場合に機能します。たとえば、1つのシェルに入って実行する
$ sleep 1234567
ps
別のシェルで使用すると、起動方法のみが表示されます。
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
を使用するlsof
と、実行したバイナリが表示されます。
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
MacPorts coreutils + with_default_namesがインストールされgsleep
てい/bin/sleep
ます。
例:関連付けプロセスのコマンド名の後PID 45109
...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ps -efとgrepがうまく機能します。特定のファイル名については、単にgrepを次のようにパイプ処理します。
MacBook:~ Me$ ps -ef | grep Safari | grep -v grep
501 15733 301 0 0:25.76 ?? 1:58.24 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_4977855
(最後の 'grep -v grep'は、出力で独自のgrepコマンドを取得するのを単に停止します)
; exit
printステートメントの後に追加したのでtxt
、bashの例のように複数のエントリがある場合でも、最初のエントリのみが印刷されます。