実行中のプロセスの絶対パスを知るにはどうすればよいですか?


93

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

回答:


110
% 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

1
私のシステム(ubuntu 14.04)では、lsコマンドを実行するためにスーパーユーザーである必要はありません。
ヤルノ

3
@jarno- コマンドをls: cannot read symbolic link /proc/28783/exe: Permission denied実行lsすることではなく、自分に属していないプロセスのプロセス情報にアクセスすることです。私のボックスでは、/ procにリストされているすべてのプロセスの約97%がルートプロセスであり、他のプロセスは11人の異なるユーザーに分散されています。
イルフィ

20

つかいます:

pwdx $pid

これにより、絶対パスではなく、pidの現在の作業ディレクトリが提供されます。

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

#> which vlc
/usr/bin/vlc

3
この答えには、より多くの
賛成票

8
@Kokizzuいいえ、質問にまったく答えていないからではありません。whichコマンドは、コマンドを今実行した場合に実行されるバイナリのみを示します。問題は「どのバイナリがすでにそこで実行されているか」でした。たとえば、コンピューターに12個のjdkがあるとします。実行中のjavaプロセスについて、どのjdkが取得されたのかを知りたい場合、これは役に立ちません。今実行すると、どのjdkから取得されるかがわかります。受け入れられた答えも正しいものです。
-noamik

この答えが間違っているのは明らかです。私のマシンでは、異なるJDKバージョンといくつかの32ビット/ 64ビットでプロセスを実行しています。プロセスの正しいjstack / jmapバージョンを識別したい場合、上記の答えは機能しませんが、受け入れられた答えは機能します。
ダニエルダクーニャ

@Kokizzuこれは、「プロセスの現在の作業ディレクトリは何$pidですか?」という質問にのみ答えます。編集した投稿はまだ質問に答えません。which「コマンドがパス上にある場合、それは何ですか?」
ジョンストロード

pwdxRedhat x64 6.3のpidに応じて、プロセスの実行可能プログラムの絶対パスを返します。
ニックドン

14

1つの方法はps -efです


5
特定のサービスのために動作しませんでした、それだけで相対パスを提供
Jaderディアス

開始されたコマンドを使用してプロセスを識別するのに役立ちました。
-jpierson


2

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

UnixのFAQ、特に質問4.3および4.4を参照してください。


2

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

pwdx `pgrep ###process_name###`

質問は「私が見ることができるようにps」と述べているので、おそらくPIDを表示するでしょう
-Scz

ああ、そうだ。私の使用例の多くでは、これが1つのライナーであることが今でもすぐにわかります。
-moodboom

1

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

lsof -p PROCESS_ID

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

例として、次のコマンドを実行して、「java」プロセスの出所を特定しました。

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


これは、すでに投稿された回答とは正確にどのように異なりますか?
ポン引きジュースIT

0

使用できます

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

または

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.