尋找目前正在運行的進程的可執行檔的*位置*

尋找目前正在運行的進程的可執行檔的*位置*

如果我有 2 個可執行檔(/path/to/gcc/myapp.exe、 和/path/to/intel/myapp.exe),其中一個是使用 intel 編譯器編譯的,另一個是使用標準 gcc 編譯的,則運行這兩個文件將顯示topmyapp.如果我運行這兩個並且進程運行為myapp,有沒有辦法可以找出哪個進程來自哪個可執行檔?

我們的叢集上安裝了一堆應用程序,我不僅對哪些應用程式使用最多感興趣,而且對哪些應用程式感興趣版本正在使用的應用程式。如果我看到 500 次正在R運行,我想知道其中 100 次是否來自/path/to/R-3.2.1/intel/R,其他 400 次來自/path/to/R-3.1.3/gcc/R等等。

答案1

您可以使用/proc檔案系統來執行此操作,如proc(5)手冊頁:

/proc/[pid]/exe

在Linux 2.2及更高版本中,該檔案是一個符號鏈接,包含所執行命令的實際路徑名。

因為它是一個符號連結,您可以閱讀目標(執行 anls -l查看路徑名)。

當然[pid]意味著您在運行時感興趣的特定可執行檔的進程 ID。

(您的系統不太可能運行那麼舊的 Linux 內核,因此「始終有效」應該足夠好了)。

要獲得計數,您只需要一個腳本來遍歷/proc您擁有的每個目錄(因為您正在運行程序,您可以看到它們的/proc資料),並將路徑名與您感興趣的路徑名稱進行匹配。這readlink例如,program 在 bash 腳本中很有用(並且由於它是 的一部分coreutils,因此您可能在 Linux 系統上擁有它)。

答案2

為此,您可以啟動top,然後c按鍵盤切換完整路徑視圖。

答案3

如果這些進程使用不同的命令列執行(例如使用完整路徑),您可以按c顯示/隱藏執行該進程的完整命令列。

相關內容