web-dev-qa-db-ja.com

実行中のプロセスの絶対パスを知る方法は?

ディスク上に同じアプリケーションのコピーが複数あり、そのうち1つだけが実行されている場合、psでわかるように、絶対値を知るにはどうすればよいですか?他と区別するための道は?

91
Jader Dias
% Sudo ls -l /proc/PID/exe

例えば:

%ps -auxwe | grep 24466 
 root 24466 0.0 0.0 1476 280? S 2009 0:00 sshd 
%Sudo ls -l /proc/24466/exe /daemontools-0.76/command/supervise
107
akira

つかいます:

pwdx $pid

これにより、pidの現在の作業ディレクトリがわかります。絶対パスではありません。

通常whichコマンドはどちらがシェルから呼び出されているかを教えてくれます:

#> which vlc
/usr/bin/vlc
16
seenu

一つの方法はps -efです

14
fpmurphy
6
Jader Dias

なぜあなたはPIDを知っていると誰もが期待しているのですか?これは人間に優しい方法です。

pwdx `pgrep ###process_name###`
2
moodboom

素早い答えは、オプションと一緒にpsを使うか、/procファイルシステム情報を使うことです。それは通常はうまくいくでしょうが、保証されません。一般的に、明確で保証された答えはありません。たとえば、実行中のファイルが実行中に削除され、そのファイルへのパスがない場合はどうなりますか。

もう少し詳しく、特に質問4.3と4.4については、 Unix FAQ を見てください。

2
mpez0

lsofはオプションです。あなたは以下のようなことを試すことができます:

lsof -p PROCESS_ID

これにより、実行可能ファイルの実際の場所を含む、プロセスによって開かれたすべてのファイルが一覧表示されます。それから、あなたが探している情報を見つけるためにもう少しawk、cut、grepなどを追加することが可能です。

例として、私は自分の 'Java'プロセスがどこから来たのかを識別するために以下のコマンドを実行しました。

lsof -p 12345 | awk '{print $ NF}' | grep 'Java $'

0
ram

あなたが使用することができます

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

または

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

絶対パスを取得します。 PIDはプロセスです。

0
jarno