Linux中ps命令詳解

ARM 864瀏覽

1 Linux進程狀態

Linux上進程有5種狀態:

  1. 運行(正在運行或在運行隊列中等待)
  2. 中斷(休眠中,?受阻,?在等待某個條件的形成或接受到信號)
  3. 不可中斷(收到信號不喚醒和不可運行,?進程必須等待直到有中斷發生)
  4. 僵死(進程已終止,?但進程描述符存在,?直到父進程調用wait4()系統調用后釋放)
  5. 停止(進程收到SIGSTOP,?SIGSTP,?SIGTIN,?SIGTOU信號后停止運行)

ps工具標識進程的5種狀態碼:

  1. D?不可中斷?uninterruptible?sleep?(usually?IO)
  2. R?運行?runnable?(on?run?queue)
  3. S?中斷?sleeping
  4. T?停止?traced?or?stopped
  5. Z?僵死?a?defunct?(”zombie”)?process

2 ps命令說明

名稱:ps

使用權限:所有使用者

使用方式:ps [options] [--help]?

說明:顯示瞬間行程 (process) 的動態

參數:?

  1. ps?的參數非常多,?在此僅列出幾個常用的參數并大略介紹含義
  2. -A?列出所有的行程
  3. -w?顯示加寬可以顯示較多的資訊
  4. -au?顯示較詳細的資訊
  5. -aux?顯示所有包含其他使用者的行程
  6. au(x)?輸出格式?:
  7. USER?PID?%CPU?%MEM?VSZ?RSS?TTY?STAT?START?TIME?COMMAND
  8. USER:?進程擁有者
  9. PID:?pid
  10. %CPU:?占用的?CPU?使用率
  11. %MEM:?占用的記憶體使用率
  12. VSZ:?占用的虛擬記憶體大小
  13. RSS:?占用的記憶體大小
  14. TTY:?終端的次要裝置號碼?(minor?device?number?of?tty)
  15. STAT:?該行程的狀態:
  16. D:?不可中斷的靜止
  17. R:?正在執行中
  18. S:?靜止狀態
  19. T:?暫停執行
  20. Z:?不存在但暫時無法消除
  21. W:?沒有足夠的記憶體分頁可分配
  22. <:?高優先序的行程
  23. N:?低優先序的行程
  24. L:?有記憶體分頁分配并鎖在記憶體內?(即時系統或捱A?I/O)
  25. START:?行程開始時間
  26. TIME:?執行的時間
  27. COMMAND:所執行的指令

3 范例

$ ps???
PID?TTY?TIME?CMD???
2791?ttyp0?00:00:00?tcsh???
3092?ttyp0?00:00:00?ps???

$?ps?-A
PID?TTY?TIME?CMD???
1???00:00:03?init???
2???00:00:00?kflushd???
3???00:00:00?kpiod???
4???00:00:00?kswapd???
5???00:00:00?mdrecoveryd???
.......???

$?ps?-aux???
USER?PID?%CPU?%MEM?VSZ?RSS?TTY?STAT?START?TIME?COMMAND???
root?1?0.0?0.7?1096?472???S?Sep10?0:03?init?[3]???
root?2?0.0?0.0?0?0???SW?Sep10?0:00?[kflushd]???
root?3?0.0?0.0?0?0???SW?Sep10?0:00?[kpiod]???
root?4?0.0?0.0?0?0???SW?Sep10?0:00?[kswapd]

具體命令解釋如下:

  1. ps?a?顯示現行終端機下的所有程序,包括其他用戶的程序。
  2. ps?-A?顯示所有程序。
  3. ps?c?列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
  4. ps?-e?此參數的效果和指定"A"參數相同。??例如:??ps?-e|grep?sshd??
  5. ps?e?列出程序時,顯示每個程序所使用的環境變量。
  6. ps?f?用ASCII字符顯示樹狀結構,表達程序間的相互關系。
  7. ps?-H?顯示樹狀結構,表示程序間的相互關系。
  8. ps?-N?顯示所有的程序,除了執行ps指令終端機下的程序之外。
  9. ps?s?采用程序信號的格式顯示程序狀況。
  10. ps?S?列出程序時,包括已中斷的子程序資料。
  11. ps?-t<終端機編號>???指定終端機編號,并列出屬于該終端機的程序的狀況。
  12. ps?u?以用戶為主的格式來顯示程序狀況。
  13. ps?x???顯示所有程序,不以終端機來區分。

最常用的方法是ps?-aux,然后再利用一個管道符號導向到grep去查找特定的進程,然后再對特定的進程進行操作。

4 Linux中top與ps區別

4.1 ps命令

以下是 ps 的最簡單形式:

$?ps??
PID?TTY??????????TIME?CMD??
3884?pts/1????00:00:00?bash??
3955?pts/2????00:00:00?more??
3956?pts/5????00:00:05?sqlplus
  • PID?是進程的標識號。
  • TTY?是進程所屬的終端控制臺。
  • TIME?列是進程所使用的總的?CPU?時間。
  • ?CMD?列列出正在執行的命令行。

使用帶有?-ef?選項的?ps,返回系統中所有用戶的所有進程的完整列表。

一般將此?ps?命令的結果傳送到?grep?中,則該結果更易于查看。例如:
$??ps?-ef?|?grep?Oracle??
UID????????PID??PPID??C?STIME?TTY?????????TIME?CMD??
oracle????1633?????1??0?13:58??00:00:00?ora_pmon_ora1??
oracle????1635?????1??0?13:58??00:00:00?ora_dbw0_ora1??
oracle????1637?????1??0?13:58??00:00:01?ora_lgwr_ora1??
oracle????1639?????1??0?13:58??00:00:02?ora_ckpt_ora1??
oracle????1641?????1??0?13:58??00:00:02?ora_smon_ora1??
oracle????1643?????1??0?13:58??00:00:00?ora_reco_ora1??
oracle????1645?????1??0?13:58??00:00:00?ora_cjq0_ora1??
oracle????1647?????1??0?13:58??00:01:18?ora_qmn0_ora1??
oracle????1649?????1??0?13:58??00:00:00?ora_s000_ora1??
oracle????1651?????1??0?13:58??00:00:00?ora_d000_ora1
  • -e?:?在命令執行后顯示環境
  • -f?:?完整顯示輸出

標為?C?的列是由?CPU?用于計算執行優先級的因子。
STIME?是指進程的啟動時間。
問號表示這些進程不屬于任何?TTY,因為它們是由系統啟動的。

主要參數說明:

1) 進程用戶ID(UID),
雖然 uid 通常是指數字型的標識,但在第一列下指定的是用戶名,標記為 UID
2) 進程ID (PID)
3) 父進程ID (PPID)
PPID 是父進程的標識號。對于 Oracle 進程,這里的標識號為 1 — 它是 init 進程(所有進程的父進程)的 id,因為在本系統中安裝的 Oracle 是作為登錄進程的一部分而啟動的
4) CPU 調度情況 (C)
即是是由 CPU 用于計算執行優先級的因子。
5) 進程啟動的時間 (STIME)
6) 進程共占用CPU的時間(TIME)
7) 啟動進程的命令 (CMD)
8)問號表示這些進程不屬于任何 TTY,因為它們是由系統啟動的。

使用PS命令分析系統性能的方法主要有:
1) 首先,根據用戶ID尋找由同一用戶執行的許多相似任務,這些任務很可能是因為用戶運行的某個腳本程序在后臺啟動多個進程而造成的。
2) 接下來,檢查TIME域中各進程累計占用CPU的時間,如果有某個進程累計占用了大量的CPU時間,通常說明該進程可能陷入了無限循環,或該京城的某寫邏輯出了錯
3) 找到那些已陷入死鎖的進程ID后,就可以使用kill命令強制終止該進程了。

4.2 top命令

Ps 只為您提供當前進程的快照。要即時查看最活躍的進程,可使用 top。
Top 實時地提供進程信息。它還擁有交互式的狀態,允許用戶輸入命令,如 n 后面跟有 5 或 10 等數字。

其結果是指示 top 顯示 5 或 10 個最活躍的進程。

Top 持續運行,直到您按 "q" 退出 top 為止。
Top中的幾個隱含參數:
top中按1鍵和F鍵的參數:
按1鍵可以等到多個cpu的情況
按F(f:當前狀態,可以按相應的字母鍵做top的定制輸出)后得參數:
對F鍵和f鍵的區別:
如果進入F鍵區可以做進程顯示的排序,如果進入f鍵區的話則可以選擇顯示的多個項目:

*?A:?PID????????=?Process?Id????????????????//進程ID????????????
??b:?PPID???????=?Parent?Process?Pid????????//父進程ID????????????
??c:?RUSER??????=?Real?user?name????????????//真正的(Real)所屬用戶名稱????????????
??d:?UID????????=?User?Id???????????????????//用戶ID????????????
??e:?USER???????=?User?Name?????????????????//用戶名稱????????????
??f:?GROUP??????=?Group?Name?????????????//組名稱???
??g:?TTY????????=?Controlling?Tty???????????//控制????????????
??h:?PR?????????=?Priority??????????????????//優先權????????????
??i:?NI?????????=?Nice?value????????????????//優先級得值(負數代表較高的優先級,正數是較低的優先級.0標志改優先級的值是不會被調整的)????????????
??j:?#C?????????=?Last?used?cpu?(SMP)???????//隨后使用的cpu比率????????????
??k:?%CPU???????=?CPU?usage?????????????????//cpu使用比率????????????
??l:?TIME???????=?CPU?Time??????????????????//cpu占用時間????????????
??m:?TIME+??????=?CPU?Time,?hundredths?????//cpu%比???
??n:?%MEM???????=?Memory?usage?(RES)????????//內存使用率???
??o:?VIRT???????=?Virtual?Image?(kb)????????//虛擬鏡像(VIRT?=?SWAP?+?RES:所有進程使用的虛擬內存值,包括所有的代碼,數據,共享庫已經被swapped?out的)???
??p:?SWAP???????=?Swapped?size?(kb)?????????//交換空間大小(所有虛擬內存中的鏡像)???
??q:?RES????????=?Resident?size?(kb)????????//已經使用了的常駐內存(Resident?size):RES?=?CODE?+?DATA???
??r:?CODE???????=?Code?size?(kb)????????????//分配給執行代碼的物理內存???
??s:?DATA???????=?Data+Stack?size?(kb)??????//data+stack:物理內存中非存放代碼的空間,用于存放數據???
??t:?SHR????????=?Shared?Mem?size?(kb)??????//共享內存大小.放映了一個task的潛在可以供別人使用的內存的大小???
??u:?nFLT???????=?Page?Fault?count??????????//內存頁錯誤的數量???
??v:?nDRT???????=?Dirty?Pages?count?????????//臟頁的數量???
??w:?S??????????=?Process?Status????????????//進程狀態:(?R?)為運行或可執行的,(?S?)為該程序正在睡眠中,(?T?)正在偵測或者是停止了,(?Z?)僵尸程序???
??x:?COMMAND????=?Command?name/line?????????//進程啟動命令行參數???
??y:?WCHAN??????=?Sleeping?in?Function??????//在睡眠中???
??z:?Flags??????=?Task?Flags?<sched.h>??????//任務標志

Note1:

If?a?selected?sort?field?can't?be??shown?due?to?screen?width?or?your??field?order,?the?'<'?and?'>'?keys

will?be?unavailable?until?a?field??within?viewable?range?is?chosen.

Note2:

Field?sorting?uses?internal?values,??not?those?in?column?display.??Thus,??the?TTY?&?WCHAN?fields?will?violate??strict?ASCII?collating?sequence.???(shame?on?you?if?WCHAN?is?chosen)

Current?Fields:??AEHIOQTWKNMbcdfgjplrsuvyzX??for?window?1:Def

Toggle?fields?via?field?letter,?type?any?other?key?to?return

*?A:?PID????????=?Process?Id???
*?E:?USER???????=?User?Name???
*?H:?PR?????????=?Priority???
*?I:?NI?????????=?Nice?value???
*?O:?VIRT???????=?Virtual?Image?(kb)???
*?Q:?RES????????=?Resident?size?(kb)???
*?T:?SHR????????=?Shared?Mem?size?(kb)???
*?W:?S??????????=?Process?Status???
*?K:?%CPU???????=?CPU?usage???
*?N:?%MEM???????=?Memory?usage?(RES)???
*?M:?TIME+??????=?CPU?Time,?hundredths???
??b:?PPID???????=?Parent?Process?Pid???
??c:?RUSER??????=?Real?user?name???
??d:?UID????????=?User?Id???
??f:?GROUP??????=?Group?Name???
??g:?TTY????????=?Controlling?Tty???
??j:?#C?????????=?Last?used?cpu?(SMP)???
??p:?SWAP???????=?Swapped?size?(kb)???
??l:?TIME???????=?CPU?Time???
??r:?CODE???????=?Code?size?(kb)???
??s:?DATA???????=?Data+Stack?size?(kb)???
??u:?nFLT???????=?Page?Fault?count???
??v:?nDRT???????=?Dirty?Pages?count???
??y:?WCHAN??????=?Sleeping?in?Function???
??z:?Flags??????=?Task?Flags?<sched.h>???
*?X:?COMMAND????=?Command?name/line

Flags?field:

??0x00000001??PF_ALIGNWARN???
??0x00000002??PF_STARTING???
??0x00000004??PF_EXITING???
??0x00000040??PF_FORKNOEXEC???
??0x00000100??PF_SUPERPRIV???
??0x00000200??PF_DUMPCORE???
??0x00000400??PF_SIGNALED???
??0x00000800??PF_MEMALLOC???
??0x00002000??PF_FREE_PAGES?(2.5)???
??0x00008000??debug?flag?(2.5)???
??0x00024000??special?threads?(2.5)???
??0x001D0000??special?states?(2.5)???
??0x00100000??PF_USEDFPU?(thru?2.4)

原文地址:http://blog.csdn.net/x_i_y_u_e/article/details/38708481

七星彩走势图2元网官网