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

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

Advertisement

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

Advertisement
Advertisement

回答 (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
Advertisement
14
14
2010-02-01 13:58:59 +0000
Advertisement

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

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

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
Advertisement
2
2
2016-04-27 23:28:20 +0000
Advertisement

なぜ誰もが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はプロセスです。

Advertisement

関連する質問

6
10
10
5
13
Advertisement
Advertisement