在Linux系統(tǒng)中,ps(Process Status的縮寫)命令常常用來用來列出系統(tǒng)中當(dāng)前運(yùn)行的進(jìn)程。ps命令用來列出系統(tǒng)中當(dāng)前運(yùn)行的那些進(jìn)程。要對(duì)進(jìn)程進(jìn)行監(jiān)測(cè)和控制,首先必須要了解當(dāng)前進(jìn)程的情況,也就是需要查看當(dāng)前進(jìn)程,而 ps 命令就是最基本同時(shí)也是非常強(qiáng)大的進(jìn)程查看命令。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等等??傊蟛糠中畔⒍际强梢酝ㄟ^執(zhí)行該命令得到的。
Linux上進(jìn)程有5種狀態(tài):
- 運(yùn)行(正在運(yùn)行或在運(yùn)行隊(duì)列中等待)
- 中斷(休眠中, 受阻, 在等待某個(gè)條件的形成或接受到信號(hào))
- 不可中斷(收到信號(hào)不喚醒和不可運(yùn)行, 進(jìn)程必須等待直到有中斷發(fā)生)
- 僵死(進(jìn)程已終止, 但進(jìn)程描述符存在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放)
- 停止(進(jìn)程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號(hào)后停止運(yùn)行運(yùn)行)
ps工具標(biāo)識(shí)進(jìn)程的5種狀態(tài)碼:
- R 運(yùn)行 runnable (on run queue)
- S 中斷 sleeping
- D 不可中斷 uninterruptible sleep (usually IO)
- T 停止 traced or stopped
- Z 僵死 a defunct (”zombie”) process
ps 使用
用法:ps [ 參數(shù) ]
ps命令有很多參數(shù),具體如下:
- -A 顯示所有進(jìn)程(等價(jià)于-e)(utility)
- -a 顯示一個(gè)終端的所有進(jìn)程,除了會(huì)話引線
- -N 忽略選擇。
- -d 顯示所有進(jìn)程,但省略所有的會(huì)話引線(utility)
- -x 顯示沒有控制終端的進(jìn)程,同時(shí)顯示各個(gè)命令的具體路徑。dx不可合用。(utility)
- -p pid 進(jìn)程使用cpu的時(shí)間
- -u uid or username 選擇有效的用戶id或者是用戶名
- -g gid or groupname 顯示組的所有進(jìn)程。
- U username 顯示該用戶下的所有進(jìn)程,且顯示各個(gè)命令的詳細(xì)路徑。如:ps U zhang;(utility)
- -f 全部列出,通常和其他選項(xiàng)聯(lián)用。如:ps -fa or ps -fx and so on.
- -l 長(zhǎng)格式(有F,wchan,C 等字段)
- -j 作業(yè)格式
- -o 用戶自定義格式。
- v 以虛擬存儲(chǔ)器格式顯示
- s 以信號(hào)格式顯示
- -m 顯示所有的線程
- -H 顯示進(jìn)程的層次(和其它的命令合用,如:ps -Ha)(utility)
- e 命令之后顯示環(huán)境(如:ps -d e; ps -a e)(utility)
- h 不顯示第一行
- –version 顯示版本信息
- –help 顯示幫助信息
下面給大家舉幾個(gè)在日常生活中使用較多的ps命令。
1、ps -aux
最常用的方法是ps -aux,然后再利用一個(gè)管道符號(hào)導(dǎo)向到grep去查找特定的進(jìn)程,然后再對(duì)特定的進(jìn)程進(jìn)行操作。
列說明:
- USER: 用戶名
- PID: 進(jìn)程ID(Process ID)
- %CPU: 進(jìn)程的cpu占用率
- %MEM: 進(jìn)程的內(nèi)存占用率
- VSZ: 進(jìn)程所使用的虛存的大?。╒irtual Size)
- RSS: 進(jìn)程使用的駐留集大小或者是實(shí)際內(nèi)存的大小,Kbytes字節(jié)。
- TTY: 與進(jìn)程關(guān)聯(lián)的終端(tty)
- STAT: 進(jìn)程的狀態(tài):進(jìn)程狀態(tài)使用字符表示的(STAT的狀態(tài)碼)
- TIME: 進(jìn)程使用的總cpu時(shí)間
- COMMAND: 正在執(zhí)行的命令行命令
2、ps -axjf
樹形顯示進(jìn)程,有時(shí)候我們希望以樹形結(jié)構(gòu)顯示進(jìn)程,可以使用 -axjf參數(shù)。
ps -axjf
或者可以使用另一個(gè)命令。
pstree
3、ps -ef
是用標(biāo)準(zhǔn)的格式顯示進(jìn)程的、其格式如下
列說明:
- UID: 用戶ID(User ID)
- PID: 進(jìn)程ID(Process ID)
- PPID: 父進(jìn)程的進(jìn)程ID(Parent Process id)
- STIME: 啟動(dòng)時(shí)間
- TTY: 與進(jìn)程關(guān)聯(lián)的終端(tty)
- TIME: 進(jìn)程使用的總cpu時(shí)間
- CMD: 正在執(zhí)行的命令行命令
4、ps -l
列說明:
- F: 代表這個(gè)程序的旗標(biāo) (flag), 4 代表使用者為 super user
- S: 睡眠 Sleeping 休眠中, 受阻, 在等待某個(gè)條件的形成或接受到信號(hào)。
- UID: 用戶ID(User ID)
- PID: 進(jìn)程ID(Process ID)
- PPID: 父進(jìn)程的進(jìn)程ID(Parent Process id)
- C: CPU 使用的資源百分比
- PRI: 這個(gè)是 Priority (優(yōu)先執(zhí)行序) 的縮寫,詳細(xì)后面介紹
- NI: 這個(gè)是 Nice 值,在下一小節(jié)我們會(huì)持續(xù)介紹
- ADDR: 這個(gè)是 kernel function,指出該程序在內(nèi)存的那個(gè)部分。如果是個(gè) running的程序,一般就是 “-“
- SZ: 使用掉的內(nèi)存大小
- WCHAN: 目前這個(gè)程序是否正在運(yùn)作當(dāng)中,若為 – 表示正在運(yùn)作
- TTY: 登入者的終端機(jī)位置
- TIME: 使用掉的 CPU 時(shí)間。
- CMD 所下達(dá)的指令為何
5、顯示所有當(dāng)前進(jìn)程
(1)、ps -ax
使用 -a參數(shù),-a 代表 all。同時(shí)加上x參數(shù)會(huì)顯示沒有控制終端的進(jìn)程。
(2)、ps -ax | less
這個(gè)命令的結(jié)果或許會(huì)很長(zhǎng)。為了便于查看,可以結(jié)合less命令和管道來使用。
6、通過cpu和內(nèi)存使用來過濾進(jìn)程
如果你想把結(jié)果按照 CPU 或者內(nèi)存用量來篩選,這樣你就找到哪個(gè)進(jìn)程占用了你的資源。要做到這一點(diǎn),我們可以使用 aux 參數(shù),來顯示全面的信息:
(1)、ps -aux | less
顯示全面信息
當(dāng)結(jié)果很長(zhǎng)時(shí),我們可以使用管道和less命令來篩選。
默認(rèn)的結(jié)果集是未排好序的,可以通過 –sort命令來排序。
(2)、根據(jù) CPU 使用來升序排序
$ ps -aux –sort -pcpu | less
根據(jù)cpu使用排序
(3)、根據(jù)內(nèi)存使用來升序排序
$ ps -aux –sort -pmem | less
根據(jù)內(nèi)存使用來排序
(4)、我們也可以將它們合并到一個(gè)命令,并通過管道顯示前5個(gè)結(jié)果:
ps -aux –sort -pcpu,+pmem | head -n 5
更多Linux命令相關(guān)信息見Linux命令大全 專題頁面 http://www.sfodin.cn/topicnews.aspx?tid=16