歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> ps命令詳解,進程的狀態

ps命令詳解,進程的狀態

日期:2017/3/1 16:26:01   编辑:關於Linux
ps命令詳解,進程的狀態 名稱:ps 使用權限:所有使用者 使用方式:ps [options] [--help] 說明:顯示瞬間行程 (process) 的動態 參數: ps 的參數非常多, 在此僅列出幾個常用的參數並大略介紹含義 -A 列出所有的行程 -w 顯示加寬可以顯示較多的資訊 -au 顯示較詳細的資訊 -aux 顯示所有包含其他使用者的行程 au(x) 輸出格式 : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND USER: 行程擁有者 PID: pid %CPU: 占用的 CPU 使用率 %MEM: 占用的記憶體使用率 VSZ: 占用的虛擬記憶體大小 RSS: 占用的記憶體大小 TTY: 終端的次要裝置號碼 (minor device number of tty) STAT: 該行程的狀態: D: 不可中斷的靜止 R: 正在執行中 S: 靜止狀態 T: 暫停執行 Z: 不存在但暫時無法消除 W: 沒有足夠的記憶體分頁可分配 <: 高優先序的行程 N: 低優先序的行程 L: 有記憶體分頁分配並鎖在記憶體內 START: 行程開始時間 TIME: 執行的時間 COMMAND:所執行的指令 范例: 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] ........ ps aux ------------------------------------------------------ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1340 440 ? S Nov05 0:04 init root 2 0.0 0.0 0 0 ? SW Nov05 0:00 [keventd] root 3 0.0 0.0 0 0 ? SW Nov05 0:00 [keventd] ... ------------------------------------------------------ USER域指明了是哪個用戶啟動了這個命令; 用戶可以查看某個進程占用了多少CPU; 內存使用及其VSZ(虛擬內存大小)和RSS(常駐集大小): VSZ表示如果一個程序完全駐留在內存的話需要占用多少內存空間; RSS指明了當前實際占用了多少內存; STAT顯示了進程當前的狀態: "S":進程處在睡眠狀態,表明這些進程在等待某些事件發生--可能是用戶輸入或者系統資源的可用性; 在一個進程調用了exit之後,該進程並非馬上就消失掉,而是留下一個稱為僵屍進程(Zombie)的數據結構。在Linux進程的5種狀態中,僵屍進程是非常特殊的一種,它已經放棄了幾乎所有內存空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退出狀態等信息供其他進程收集,除此之外,僵屍進程不再占有任何內存空間。 系統調用exit的作用是使進程退出,但也僅僅限於將一個正常的進程變成一個僵屍進程,並不能將其完全銷毀。 進程一旦調用了wait,就立即阻塞自己,由wait自動分析是否當前進程的某個子進程已經退出,如果讓它找到了這樣一個已經變成僵屍的子進程,wait 就會收集這個子進程的信息,並把它徹底銷毀後返回;如果沒有找到這樣一個子進程,wait就會一直阻塞在這裡,直到有一個出現為止。 運行 ps aux 的到如下信息: ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND smmsp 3521 0.0 0.7 6556 1616 ? Ss 20:40 0:00 sendmail: Queue runner@01:00:00 f root 3532 0.0 0.2 2428 452 ? Ss 20:40 0:00 gpm -m /dev/input/mice -t imps2 htt 3563 0.0 0.0 2956 196 ? Ss 20:41 0:00 /usr/sbin/htt -retryonerror 0 htt 3564 0.0 1.7 29460 3704 ? Sl 20:41 0:00 htt_server -nodaemon root 3574 0.0 0.4 5236 992 ? Ss 20:41 0:00 crond xfs 3617 0.0 1.3 13572 2804 ? Ss 20:41 0:00 xfs -droppriv -daemon root 3627 0.0 0.2 3448 552 ? SNs 20:41 0:00 anacron -s root 3636 0.0 0.1 2304 420 ? Ss 20:41 0:00 /usr/sbin/atd dbus 3655 0.0 0.5 13840 1084 ? Ssl 20:41 0:00 dbus-daemon-1 --system .................................... stat 中的參數意義如下: D 不可中斷 Uninterruptible(usually IO) R 正在運行,或在隊列中的進程 S 處於休眠狀態 T 停止或被追蹤 Z 僵屍進程 W 進入內存交換(從內核2.6開始無效) X 死掉的進程 < 高優先級 n 低優先級 s 包含子進程 + 位於後台的進程組 ====================================== ps命令 要對進程進行監測和控制,首先必須要了解當前進程的情況,也就是需要查看當前進程,而ps命令就是最基本同時也是非常強大的進程查看命令.使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵屍、哪些進程占用了過多的資源等等.總之大部分信息都是可以通過執行該命令得到的. ps命令最常用的還是用於監控後台進程的工作情況,因為後台進程是不和屏幕鍵盤這些標准輸入/輸出設備進行通信的,所以如果需要檢測其情況,便可以使用ps命令了. 1)ps a 顯示現行終端機下的所有程序,包括其他用戶的程序。 2)ps -A 顯示所有程序。 3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。 4)ps -e 此參數的效果和指定"A"參數相同。 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去查找特定的進程,然後再對特定的進程進行操作。 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 注: 其它狀態還包括W(無駐留頁), <(高優先級進程), N(低優先級進程), L(內存鎖頁). 使用ps格式輸出來查看進程狀態: ps -eo user,stat..,cmd user 用戶名 uid 用戶號 pid 進程號 ppid 父進程號 size 內存大小, Kbytes字節. vsize 總虛擬內存大小, bytes字節(包含code+data+stack) share 總共享頁數 nice 進程優先級(缺省為0, 最大為-20) priority(pri) 內核調度優先級 pmem 進程分享的物理內存數的百分比 trs 程序執行代碼駐留大小 rss 進程使用的總物理內存數, Kbytes字節 time 進程執行起到現在總的CPU暫用時間 stat 進程狀態 cmd(args) 執行命令的簡單格式 例子: 查看當前系統進程的uid,pid,stat,pri, 以uid號排序. ps -eo pid,stat,pri,uid –sort uid 查看當前系統進程的user,pid,stat,rss,args, 以rss排序. ps -eo user,pid,stat,rss,args –sort rss 、 要對進程進行監測和控制,首先必須要了解當前進程的情況,也就是需要查看當前進程,而 ps 命令就是最基本同時也是非常強大的進程查看命令。使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等。總之大部分信息都是可以通過執行該命令得到的。 ps 為我們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;如果想對進程時間監控,應該用 top 工具。 kill 用於殺死進程。 1、ps 的參數說明 ps 提供了很多的選項參數,常用的有以下幾個: l 長格式輸出; u 按用戶名和啟動時間的順序來顯示進程; j 用任務格式來顯示進程; f 用樹形格式來顯示進程; a 顯示所有用戶的所有進程(包括其它用戶); x 顯示無控制終端的進程; r 顯示運行中的進程; ww 避免詳細參數被截斷; 我們常用的選項是組合是 aux 或 lax,還有參數 f 的應用。 2、ps aux 或 lax 輸出的解釋 USER 進程的屬主; PID 進程的ID; PPID 父進程; %CPU 進程占用的CPU百分比; %MEM 占用內存的百分比; NI 進程的NICE值,數值大,表示較少占用CPU時間; VSZ 進程虛擬大小; RSS 駐留中頁的數量; TTY 終端ID STAT 進程狀態(有以下幾種) D 無法中斷的休眠狀態(通常 IO 的進程); R 正在運行可中在隊列中可過行的; S 處於休眠狀態; T 停止或被追蹤; W 進入內存交換(從內核2.6開始無效); X 死掉的進程(從來沒見過); Z 僵屍進程; < 優先級高的進程 N 優先級較低的進程 L 有些頁被鎖進內存; s 進程的領導者(在它之下有子進程); l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads); + 位於後台的進程組; WCHAN 正在等待的進程資源; START 啟動進程的時間; TIME 進程消耗CPU的時間; COMMAND 命令的名稱和參數; 3、應用舉例 [root@localhost ~]# ps -aux |more 可以用 | 管道和 more 連接起來分頁查看。 [root@localhost ~]# ps -aux > ps001.txt [root@localhost ~]# more ps001.txt 這裡是把所有進程顯示出來,並輸出到ps001.txt文件,然後再通過more 來分頁查看。 4、kill 終止進程 有十幾種控制進程的方法,下面是一些常用的方法: kill -STOP [pid] 發送SIGSTOP (17,19,23)停止一個進程,而並不消滅這個進程。 kill -CONT [pid] 發送SIGCONT (19,18,25)重新開始一個停止的進程。 kill -KILL [pid] 發送SIGKILL (9)強迫進程立即停止,並且不實施清理操作。 kill -9 -1 終止你擁有的全部進程。 SIGKILL 和 SIGSTOP 信號不能被捕捉、封鎖或者忽略,但是,其它的信號可以。所以這是你的終極武器。
Copyright © Linux教程網 All Rights Reserved