Executable

init 是什麼意思222在ps的COMMAND列中是什麼意思?

  • August 6, 2014

閱讀流程周圍的括號是什麼意思?我了解列印了執行檔名稱。

Linux ps手冊頁:

有時程序 args 將不可用;發生這種情況時, ps 將改為在括號中列印執行檔名稱。

但是ps -Awwo pid,comm,args我得到:

 PID COMMAND         COMMAND
   1 init            init [2]

這是什麼意思?“可執行名稱”應該是initor[2]嗎?

我想執行檔當然是init- 什麼是[2]?為什麼要列印?

(另外,如果它知道執行檔名稱,我真的不明白為什麼它不能顯示完整路徑。)

如果涉及的每個人都遵循預設約定,則輸出中的comm列和列的第一個單詞都會顯示可執行程序的名稱。但是,由於各種原因,可能存在差異。args``ps

當程序啟動時,args列中顯示的命令名稱由執行程序的父程序選擇並作為參數 ( argv[0]) 傳遞。按照慣例,父級選擇執行檔的基本名稱(即不包含目錄部分的執行檔的路徑),但這不是強制的。程序執行後,它可以覆蓋該字元串。

Init(至少是傳統的 Linux SysVinit)覆蓋它argv[0]以指示目前執行級別

在 Linux 上,該comm列最初由核心填充到執行檔基本名稱的前 16 個字元。程序可以通過prctl系統呼叫改變內容。

如果執行檔被重命名或刪除,comm列和args列都不會反映這一點。

ps不顯示執行檔的路徑,這不在其工作描述中。lsof可以告訴你lsof -a -p 1 -d txt

在 Linux 上,您可以在以下文件中看到此資訊:/proc/*PID*/

  • (括號中的第二個欄位)和(欄位)comm中的程序名稱(欄位)。/proc/1/stat``/proc/1/status``Name
  • 執行檔的路徑通過/proc/1/exe.
  • (參數以空字節分隔argv[0])中的參數(以 開頭)。/proc/1/cmdline

引用自:https://unix.stackexchange.com/questions/102453