Executable
init 是什麼意思222
在ps的COMMAND列中是什麼意思?
閱讀流程周圍的括號是什麼意思?我了解列印了執行檔名稱。
Linux ps手冊頁:
有時程序 args 將不可用;發生這種情況時, ps 將改為在括號中列印執行檔名稱。
但是
ps -Awwo pid,comm,args
我得到:PID COMMAND COMMAND 1 init init [2]
這是什麼意思?“可執行名稱”應該是
init
or[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