2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99

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

ディスク上に同じアプリケーションのコピーが複数あり、ps のように 1 つだけが実行されている場合、他のアプリケーションと区別するために absolute パスをどのようにして知ることができますか?

回答 (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

例:

% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -\> /package/admin/daemontools-0.76/command/supervise
21
21
21
2013-05-03 06:48:17 +0000
pwdx $pid

これは絶対パスではなく、pidの現在の作業ディレクトリを示します。

14
14
14
2010-02-01 13:58:59 +0000

一つの方法は ps -ef です。

4
4
4
2010-02-01 13:53:01 +0000
3
3
3
2017-10-09 15:49:14 +0000

lsofはオプションです。以下のようなものを試してみてください。

lsof -p PROCESS_ID

これは、実行ファイルの実際の場所を含むプロセスによって開かれたすべてのファイルをリストアップします。その後、AWK、CUT、GREPなどを追加して、探している情報を見つけることができます。

例として、「java」プロセスがどこから来たのかを識別するために、以下のコマンドを実行しました:

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$’

2
2
2
2010-02-01 14:45:10 +0000

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

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

2
2
2
2016-04-27 23:28:20 +0000

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

pwdx `pgrep ###process_name###`
``` 0x1&
0
0
0
2016-03-05 11:35:41 +0000
readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe
find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

とか、絶対パスを取得するための PIDはプロセスです。

関連する質問

6
10
10
5
5