Unix

如何獲取 *nix 程序文件名

  • December 4, 2009

如何找出正在執行的程序的程序文件名是什麼?

以下從 shell 執行將在所有正在執行的程序的最後一列中為您提供命令、其完整路徑和呼叫參數:

ps -eF

這是 unix 語法,因為您並不具體。linux 中還有 GNU 和 BSD 語法。 man ps了解更多。

請注意,上述所有命令僅在某些時候有效。例如,此處“ps”的輸出顯示了程序的路徑,但如果您嘗試訪問該路徑,您會發現那裡什麼都沒有:

 $ ./myprogram &
 $ rm myprogram
 $ ps -fe | grep myprogram
 lars     27294 29529  0 20:39 pts/1    00:00:00 ./myprogram
 $ ls myprogram
 ls: myprogram: No such file or directory

實際上, ps 顯示的值完全取決於啟動程序的任何程式碼。例如:

$ python -c "import os; os.execl('./myprogram', '/usr/sbin/sendmail')" &
myprogram: i am: 27914
$ ps -f -p 27914
UID        PID  PPID  C STIME TTY          TIME CMD
lars     27914 29529  0 20:44 pts/1    00:00:00 /usr/sbin/sendmail

所以基本上,你不能依賴 ps 的輸出。您也許可以依賴/proc/PID/exe,例如:

 $ ls -l /proc/27914/exe
 lrwxrwxrwx 1 lars lars 0 Dec  3 20:46 /proc/27914/exe -> /home/lars/tmp/myprogram

但即使在這種情況下,該文件也可能不再存在。

引用自:https://serverfault.com/questions/90864