1. 程式人生 > >ps aux、ps -aux、ps -ef之間的區別

ps aux、ps -aux、ps -ef之間的區別

Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前執行的那些程序。ps命令列出的是當前那些程序的快照,就是執行ps命令的那個時刻的那些程序,如果想要動態的顯示程序資訊,就可以使用top命令。 

要對程序進行監測和控制,首先必須要了解當前程序的情況,也就是需要檢視當前程序,而 ps 命令就是最基本同時也是非常強大的程序檢視命令。使用該命令可以確定有哪些程序正在執行和執行的狀態、程序是否結束、程序有沒有僵死、哪些程序佔用了過多的資源等等。總之大部分資訊都是可以通過執行該命令得到的。 
ps 為我們提供了程序的一次性的檢視,它所提供的檢視結果並不動態連續的;如果想對程序時間監控,應該用 top 工具。 
kill 命令用於殺死程序。 

linux上程序有5種狀態: 


1. 執行(正在執行或在執行佇列中等待) 
2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到訊號) 
3. 不可中斷(收到訊號不喚醒和不可執行, 程序必須等待直到有中斷髮生) 
4. 僵死(程序已終止, 但程序描述符存在, 直到父程序呼叫wait4()系統呼叫後釋放) 
5. 停止(程序收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU訊號後停止執行執行) 
ps工具標識程序的5種狀態碼: 
D 不可中斷 uninterruptible sleep (usually IO) 
R 執行 runnable (on run queue) 
S 中斷 sleeping 
T 停止 traced or stopped 
Z 僵死 a defunct (”zombie”) process 

具體引數可以參考man ps或 
http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html
 

這裡重點討論的是ps aux和ps –aux的區別,及ps aux和ps –ef的區別。 

1. ps aux和ps –aux 
man ps 之後得到的結果: 
ps displays information about a selection of the active processes. If you want a repetitive update of the selection and the displayed information, use top(1) instead. 

Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX standards require that "ps -aux" print all processes owned by a user named "x", as well as printing all processes that would be selected by the -a option. If the user named "x" does not exist, this ps may interpret the command as "ps aux" instead and print a warning. 
This behavior is intended to aid in transitioning old scripts and habits. It is fragile, subject to change, and thus should not be relied upon. 
意思是: 
請注意"ps -aux"不同於"ps aux"。POSIX和UNIX的標準要求"ps -aux"列印使用者名稱為"x"的使用者的所有程序,以及列印所有將由-a選項選擇的過程。如果使用者名稱為"x"不存在,ps的將會解釋為"ps aux",而且會列印一個警告。這種行為是為了幫助轉換舊指令碼和習慣。它是脆弱的,即將更改,因此不應依賴。 
如果你執行ps -aux >/dev/null,那麼你就會得到下面這行警告資訊 
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html 

綜上: 使用時兩者之間直接選擇ps aux
 
參考: 
http://walkerxk.blog.sohu.com/150633165.html 
http://blog.chinaunix.net/uid-24701781-id-3343264.html 

2. ps aux 和ps -ef 
兩者的輸出結果差別不大,但展示風格不同。aux是BSD風格,-ef是System V風格。這是次要的區別,一個影響使用的區別是aux會截斷command列,而-ef不會。當結合grep時這種區別會影響到結果。 
舉例請參考:http://www.2cto.com/os/201303/197697.html 

綜上:以上三個命令推薦使用:ps –ef