對「ps」指令的 Unix 與 BSD 標誌格式的意思感到困惑

對「ps」指令的 Unix 與 BSD 標誌格式的意思感到困惑

我讀到該ps命令可以採用兩種格式的標誌:

  • Unix 格式,您應該在標誌前面加上破折號。
  • BSD 格式中,標誌前方不應有破折號。

現在,相同的標誌是否可以用於兩種格式,例如以下命令是否意味著相同的事情:

ps -x
ps x

或者 Unix 格式是否有自己的一組標誌,而 BSD 格式有一組完全不同的標誌?

答案1

線上說明頁回答你的問題:

不同類型的選項可以自由混合,但可能會出現衝突。由於與許多標準和ps實作ps相容,因此存在一些功能相同的同義選項。

請注意,ps -aux與 不同ps aux。 POSIX 和 UNIX 標準要求ps -aux列印名為「x」的使用者擁有的所有進程,以及列印該-a選項將選擇的所有進程。如果名為「x」的使用者不存在,則此 ps 可能會將命令解釋為ps aux並列印警告。此行為旨在幫助轉變舊的腳本和習慣。它很脆弱,容易發生變化,因此不應依賴它。

標誌不同,但可以組合。通常你會選一個,例如或查看所有過程的詳細信息,ps auxps -ef不是混合。

唯一的x標誌是 BSD 標誌,因此ps xps -x產生相同的結果;但這對於兩種變體中定義的標誌都不起作用。

這一切都是特定於procpsprocps-ngps x和的等價物ps -x是「第二次機會」解析階段的結果,如果第一遍沒有完全解析所有參數,則呼叫該階段;這沒有記錄在線上幫助頁中,但在HACKING原始碼中的文件

除非個性強制 BSD 解析,否則 parser.c 會嘗試將命令列解析為混合的 BSD+SysV+Gnu 混亂。失敗時,將嘗試 BSD 解析。如果BSD解析失敗已嘗試 SysV 解析,錯誤訊息來自原始 SysV 解析。

相關內容