題 我如何知道正在運行的進程的絕對路徑?


如果我在磁盤上有相同應用程序的多個副本,並且只有一個正在運行,我可以看到 ps,我怎麼知道 絕對 將它與其他人區分開來的路徑?


80
2018-02-01 13:48


起源




答案:


% 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

93
2018-02-01 17:04



在我的系統(ubuntu 14.04)中,您不必是超級用戶來運行 ls 命令。 - jarno
@jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied  - 這不是關於運行 ls 命令,它是關於訪問不屬於您的進程的進程信息。在我的方框中,/ proc中列出的所有進程中約97%是根進程,而其他進程分佈在11個不同的用戶上。 - Irfy


使用:

pwdx $pid

這將為您提供pid的當前工作目錄,而不是其絕對路徑。

通常是 which 命令將告訴您從shell調用哪個:

#> which vlc
/usr/bin/vlc

13
2018-05-03 06:48



這個答案需要更多的支持.. - Kokizzu
@Kokizzu不,它沒有,因為它根本沒有回答這個問題。如果您現在執行命令,which命令只會告訴您將運行哪個二進製文件。問題是“哪個二進製文件已在那裡運行”。想像一下,例如你的計算機上有十幾個jdks。如果你想知道一個正在運行的java進程,它取自jdk,這對你沒有幫助。如果你現在執行它,它只會告訴你它將從哪個jdk中取出。接受的答案也是正確的答案。 - noamik
這個答案顯然是錯誤的:在我的機器上,我使用不同的JDK版本和一些32位/ 64位運行進程。如果我想為過程確定正確的jstack / jmap版本,那麼上面的答案將無效,而接受的答案將是。 - Daniel Da Cunha
@Kokizzu這只回答了這個問題,“這個過程的當前工作目錄是什麼 $pid?“編輯後的帖子仍然沒有回答這個問題。 which 只是告訴“如果命令在路徑上,那麼它是什麼?” - John Strood


一種方法是ps -ef


12
2018-02-01 13:58



沒有為特定服務工作,它只提供相對路徑 - Jader Dias
幫助我通過它啟動的命令識別進程。 - jpierson


ps auxwwwe

資源:

https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output


5
2018-02-01 13:53



在我的linux上沒有顯示所有完全限定路徑:“root 24466 0.0 0.0 1476 280?S 2009 0:00監督sshd”例如 - akira
這比其他答案更準確......可能沒那麼有用,但更正確的答案。 Upvoted。 - John Hunt


快速回答是使用 ps 選項或 /proc 文件系統信息。那會的 平時 工作,但不保證。一般來說,沒有確定的,有保證的答案。例如,如果執行期間刪除了執行文件,那麼該文件沒有路徑?

看到 Unix FAQ 更多細節,特別是問題4.3和4.4。


2
2018-02-01 14:45





為什麼每個人都希望你知道PID?這是人性化的方式:

pwdx `pgrep ###process_name###`

2
2018-04-27 23:28



問題陳述“我可以看到 ps“,所以它可能會顯示PID - Scz
好的,真的。在我的許多使用案例中,我仍然覺得這是一個更快的單行班輪。 - moodboom


你可以用

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

要么

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

獲得絕對路徑。 PID就是這個過程。


0
2018-03-05 11:35





lsof是一種選擇。您可以嘗試以下內容:

lsof -p PROCESS_ID

這將列出進程打開的所有文件,包括可執行文件的實際位置。然後可以添加一些awk,cut,grep等來查找您正在尋找的信息。

舉個例子,我執行了以下命令來確定我的'java'進程來自哪裡:

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


0
2017-10-09 15:49



這與已經發布的答案有何不同? - Pimp Juice IT