ディスク上に同じアプリケーションの複数のコピーがあり、1つだけが実行されている場合、でわかるように、他のアプリケーションと区別するためps
の絶対パスを知るにはどうすればよいですか?
ディスク上に同じアプリケーションの複数のコピーがあり、1つだけが実行されている場合、でわかるように、他のアプリケーションと区別するためps
の絶対パスを知るにはどうすればよいですか?
回答:
% sudo ls -l /proc/PID/exe
例えば:
%ps -auxwe | grep 24466 ルート24466 0.0 0.0 1476 280?S 2009 0:00 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
ls: cannot read symbolic link /proc/28783/exe: Permission denied
実行ls
することではなく、自分に属していないプロセスのプロセス情報にアクセスすることです。私のボックスでは、/ procにリストされているすべてのプロセスの約97%がルートプロセスであり、他のプロセスは11人の異なるユーザーに分散されています。
つかいます:
pwdx $pid
これにより、絶対パスではなく、pidの現在の作業ディレクトリが提供されます。
通常、which
コマンドはシェルから呼び出されているものを教えてくれます:
#> which vlc
/usr/bin/vlc
$pid
ですか?」という質問にのみ答えます。編集した投稿はまだ質問に答えません。which
「コマンドがパス上にある場合、それは何ですか?」
pwdx
Redhat x64 6.3のpidに応じて、プロセスの実行可能プログラムの絶対パスを返します。
ps auxwwwe
ソース:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
lsofはオプションです。以下のようなものを試すことができます:
lsof -p PROCESS_ID
これにより、実行可能ファイルの実際の場所など、プロセスによって開かれたすべてのファイルが一覧表示されます。その後、さらにいくつかのawk、cut、grepなどを追加して、探している情報を見つけることができます。
例として、次のコマンドを実行して、「java」プロセスの出所を特定しました。
lsof -p 12345 | awk '{print $ NF}' | grep 'java $'
ls
コマンドを実行するためにスーパーユーザーである必要はありません。