現在実行中のプロセスの実行ファイルが*どこ*にあるかを見つける

現在実行中のプロセスの実行ファイルが*どこ*にあるかを見つける

/path/to/gcc/myapp.exe実行可能ファイル 2 つ ( 、 )があり/path/to/intel/myapp.exe、1 つは Intel コンパイラでコンパイルされ、もう 1 つは標準の gcc でコンパイルされている場合、両方を実行するとtopでは として表示されますmyapp。これら両方を実行し、プロセスを として実行している場合myapp、どのプロセスがどの実行可能ファイルから来ているかを調べる方法はありますか?

私たちのクラスターにはたくさんのアプリがインストールされていますが、どのアプリが最も使用されているかだけでなく、バージョンアプリの が使用されています。 が 500 回実行されている場合、そのうち 100 回が からで、残りの 400 回が からなどかどうRかを知りたいのですが、どうすればよいですか?/path/to/R-3.2.1/intel/R/path/to/R-3.1.3/gcc/R

答え1

これはファイルシステムで実行できます/procproc(5)マニュアルページ:

/proc/[pid]/exe

Linux 2.2 以降では、このファイルは実行されたコマンドの実際のパス名を含むシンボリック リンクです。

それはシンボリックリンク、あなたは読むことができます目標(ls -lパス名を確認するには、 を実行してください)。

もちろん、これは[pid]実行時に関心のある特定の実行可能ファイルのプロセス ID を意味します。

(それほど古い Linux カーネルを実行しているシステムを持っている可能性は低いため、「常に動作する」で十分でしょう)。

カウントを取得するには/proc、所有する各ディレクトリ(プログラムを実行しているので、その/procデータを見ることができます)を調べ、パス名を興味のあるものと照合するスクリプトが必要です。readlinkたとえば、プログラムは bash スクリプトで役立ちます (の一部であるためcoreutils、Linux システムにもインストールされている可能性があります)。

答え2

これを行うには、 を起動しtopcキーボードの を押してフルパス ビューを切り替えます。

答え3

これらのプロセスが異なるコマンド ライン (たとえば、フル パスを使用) で実行される場合、 を押すと、cプロセスが実行された完全なコマンド ラインを表示/非表示にすることができます。

関連情報