首頁 >web前端 >PS教程 >ps指令詳解

ps指令詳解

高洛峰
高洛峰原創
2016-12-29 14:33:031851瀏覽

名稱:ps
使用權限:所有使用者
使用方式:ps [options] [--help]
說明:顯示瞬間行程(process) 的動態
參數:ps的參數非常多, 在此僅列出幾個常用的參數並大致介紹意義
-A    列出所有的流程
-w    顯示加寬可顯示較多的資訊
-au    顯示較詳細的資訊
-aux    顯示所有包含其他使用者的行程顯示所有包含其他使用者的行程
-aux    顯示所有包含其他使用者的行程。 ########################################################### #########

常用參數:

-A 顯示所有進程(等價於-e)(utility)
-a 顯示一個終端的所有進程,除了會話引線
-N 忽略選擇。
-d 顯示所有進程,但省略所有的會話引線(utility)
-x 顯示沒有控制終端的進程,同時顯示各個命令的具體路徑。 dx不可合用。 (utility)
-p pid 進程使用cpu的時間
-u uid or username 選擇有效的使用者id或是使用者名稱
-g gid or groupname 顯示群組的所有進程。
U username 顯示該使用者下的所有進程,且顯示各個命令的詳細路徑。如:ps U zhang;(utility)
-f 全部列出,通常和其他選項聯用。如:ps -fa or ps -fx and so on.
-l 長格式(有F,wchan,C 等欄位)
-j 作業格式
-o 使用者自訂格式。
v 以虛擬記憶體格式顯示
s 以訊號格式顯示
-m 顯示所有的執行緒
-H 顯示進程的層次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之後顯示環境(如:ps -d e; ps -a e)(utility)
h 不顯示第一行

############################ #################################

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去查找特定的進程,然後再對特定的進程進行操作。

########################################################################################################## ############

運行ps aux 的到以下資訊:

root:# ps aux
USER      PID          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.    Ss    20:40    0:00    gpm -m /dev/input/mice -t imps2
htt    3563    0.2
htt    3563    0.0 0.0    2956    196    ?    Ss    20:41    0:00    /usr/sbin/htt -retryonerror 0.315 7    29460    3704    ?    Sl    20:41    0:00    htt_server -nodaemon🠎    992    ?    Ss    20:41 0:00    crond
xfs    3617    0.0    1.3    13572    2804    ?  13572    2804    ? riv -daemon
root    3627    0.0    0.2    3448    552    ?       0.0    0.1    2304    420    ?    Ss    20:41     0.5    13840    1084    ?    Ssl    20:41 0:00    dbus-daemon-1 --system


Head標頭:

USER    使用者名稱
UID    使用者ID( )
SID    會話ID(Session id)
%CPU    進程的cpu佔用率
%MEM    進程的記憶體佔用率
VSZ    進程所使用的虛存的大小(Vual使用率
VSZ    進程所使用的虛存的大小(Vual使用率)
VSZ    進程所使用的虛存的大小(Vual使用量)實際記憶體的大小,Kbytes位元組。
TTY    與進程相關的終端機(tty)
STAT    進程的狀態:進程狀態使用字元表示的(STAT的狀態碼)
R 運行    Runnable (on run queue)        
S 睡眠    Sleeping                中, 被阻斷, 在等待某條件的形成或接受到訊號。
I 空閒    Idle
Z 僵死    Zombie(a defunct process)        進程已終止, 但進程描述子存在, 直到父進程調用wait4()系統呼叫後釋放。
D 不可中斷    Uninterruptible sleep (ususally IO)    收到訊號不喚醒與無法運作, 行程必須等待直到有中斷發生。
T 終止    Terminate                進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU訊號後停止運作運作。
P 等待交換頁
W 無駐留頁    has no resident pages        並無足夠的記憶體分頁可分配。
X 死掉的進程
N 低優先考慮記憶體鎖定頁    Lock                有記憶體分頁分配並縮減在記憶體內
s 流程的領導者(在它之下有子進程);
l 多進程的(使用CLONE_THREAD, 類似NPTL pthreads)
+ 位於後台的進程組 
START    進程啟動時間和日期
TIME 命令列指令
NI    優先權(Nice)
PRI    進程優先權編號(Priority)
WCHAN    進程正在睡眠的核心函數名稱;此函數的名稱是從/root/system.map檔案中取得的。
FLAGS    與進程相關的數字識別

######################################################################################################################## ####################

範例:
查看目前系統進程的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 為我們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;如果想對進程時間監控,應該用top 工具。


1、ps 的參數說明:

ps 提供了很多的選項參數,常用的有以下幾個:

l 長格式輸出;
u 按使用者名稱和啟動時間的順序來顯示進程;
j 用
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
把結果輸出到ps001.txt文字中並儲存。
[root@localhost ~]# more ps001.txt
這裡是把所有進程顯示出來,並輸出到ps001.txt文件,然後再透過more 來分頁查看。


4、kill 終止(殺死)進程,有十幾種控制進程的方法,以下是一些常用的方法:
[root@localhost ~]#kill -STOP [pid]
發送SIGSTOP (17,19 ,23)停止一個進程,而不會消滅這個進程。
[root@localhost ~]#kill -CONT [pid]
發送SIGCONT (19,18,25)重新開始一個停止的程序。
[root@localhost ~]#kill -KILL [pid]
發送SIGKILL (9)強迫程序立即停止,且不實施清理操作。
[root@localhost ~]#kill -9 -1
終止你擁有的全部行程。
SIGKILL 和 SIGSTOP 訊號不能被捕捉、封鎖或忽略,但是,其它的訊號可以。所以這是你的終極武器。

########################################################################################################## ############

利用ps命令向管理員報告執行中的程序:

有時候系統管理員可能只關心現在系統中運行著哪些程序,而不想知道有哪些進程在運行。由於一個應用程式可能需要啟動多個進程。所在在同等情況下,進程的數 量比程式多的多。為此從閱讀方面考慮,管理員需要知道系統中執行的特定程式。要實現這個需求的話,就需要利用指令ps來幫忙。

一、ps指令顯示結果的意義。

當需要查看系統中執行的程式時,雖然ps 命令不是唯一的命令,但絕對是使用的最頻繁的命令。如下圖所示,就是執行ps指令後顯示的結果。

在命令列中輸入命令ps,就可以顯示系統中目前運行的所有應用程式。如上圖所示,如果輸入ps指令,顯示結果主要有四部分內容。首先是PID,這是程式 的ID號碼。才作系統就是利用這個ID號碼來唯一的識別應用程序,而不是利用命令來辨認。當需要強制關閉應用程式時,就需要用到這個PID號碼。其次是 TTY,這個欄位表示使用者使用的終端程式碼。 Pts表示使用者是採用遠端登入的。第三個參數TIME表示這個程式所消耗的CPU時間,注意這個時間不是程式開 始運行的時間。最後一個參數CMD就表示程式的名字。

二、讓系統報告詳細的資料。

在使用ps指令時,如果不採用任何的可選項,則其顯示的資訊是非常有限的,而且往往只顯示目前使用者所執行的程式。當系統管理員需要知道應用程式更詳細的 運行資訊時,如想要知道這個應用程式記憶體、CPU的佔用率情況時,那麼就需要加入一些可選項。如係統管理員需要一併查看其它使用者所執行的應用程式時,就需 要在這個命令後面採用可選項-al。如此的話,系統會列出系統中所有使用者執行的所有程式。如想要知道某個程式CPU與記憶體的使用情況,而不是只簡單的現實其CPU的使用時間,那麼就需要在這個指令後面加入參數-l ,即使用ps –l指令可以讓系統顯示出應用程式的詳細運行資訊。關於上面各個欄位所代表的意義,大家若有興趣的話可以查看相關的幫助。一般來說,系統管理員關心的只是 程式的PID號碼、記憶體與CPU的使用率、指令的名字、使用者採用的終端機等等。其它的資訊對於系統管理員來說價值不是很大。

三、查看後台運行的程式。

預設情況下,ps指令只顯示前台執行的程序,而不會顯示後台執行的程序。但是並非所有的程式都是在前台運行。正常情況下,隱藏在背景執行的程式數量比前 台運行的程式多的程式多。如隨著作業系統啟動而啟動的不少系統自帶程序,其運作的方式都是後台運行。而且有時候,系統出現問題往往是因為後台程式所造成的。如 常見的木馬等程式都是在後台所運作的。為此系統管理員相對來說,更想知道在後台執行哪些程式。

如果要查看後台運行的程序,那就比較複雜一點。因為在不同版本的Linux作業系統中,要顯示後台程序其所採用的可選項是不同的。如在紅帽 Linux作業系統中,其實採用參數的形式而不是可選項。即採用ps aux指令可以顯示出所有的應用程式(包括前台與後台的)。參數與可選項的差異主要在前面又沒有這個-符號。如果帶有這個符號的就表示這是一個可選項。而 如果不帶的,就表示這事一個參數。這個符號一般情況下可不能夠省。在該寫的地方沒寫,或不需要些的地方偏偏加上了,則係統都會提示錯誤訊息,說找不到這 個指令。而在其它的Linux系統版本中,可能無法辨識這個aux參數。如在一些Linux作業系統版本中,需要採用-a可選項來完成這個任務。由於系 統版本之間的差異,給系統管理員帶來了不少的麻煩。不過值得慶幸的是,各個作業系統版本都有線上的幫助。如果系統管理員在使用新版本的作業系統時, 不知道要顯示全部進程該使用哪個可選項時,可以利用ps --heip等指令來檢視系統幫助。不過美中不足的是,系統線上幫助都是英文的,對系統管理員的英文程度是一個不小的考驗。不過如果要做Linux系統管 理員,這點英文底子還是要有的。因為最新的Linux技術基本上都是先出來英文文檔的。其實要掌握最先進的作業系統書籍,大部分的電腦書籍都是英文的。

四、對程式列表進行排序。

當運行的應用程式比較多時,系統管理員需要對應用程式進行排序。 Ps指令的排序功能是比較強的。主要是因為這個指令有一個--sort參數(注意在這個參 數前面採用的是兩個小橫桿符號,各位讀者不要以為是筆者寫錯了)。在這個參數後面加上系統管理員想要的排序字段,就可以進行排序了。如這個命令ps –A --sort cmd,就表示顯示系統所有的應用程序,並根據程式命令來進行排序。在Linux作業系統參數中,還有一個比較麻煩的事情,就是參數大小寫不同往往代表 不同的意義。如上面這個指令,將大寫字母A換成是小寫字a,則結果就完全兩樣了。大寫字元A表示所有的應用程序,而小寫字元a則表示“all w/ tty except session leaders”。兩者有本質的差別。透過這個差異可以用來過濾不同終端登陸帳戶所執行的應用程式。

在ps指令中,不少參數都有這種情況。執行ps --help查看這個指令的所有參數,就可以看到類似的大小寫不同代表不同意義的情況還有很多。如大寫字元O與小寫字元o、大寫字元U與小寫字元u等等。 這些差異無形之中增加了系統管理員維護作業系統的難度。系統管理員要掌握這麼多的參數以及參數大小寫之間的差異,往往是不可能的。系統管理員除了平常要多 使用使用常用的參數來增加值觀的印象,這個系統指令的線上幫助確實也是少不了的。這個系統幫助可以給管理員使用系統命令提供線上的指導。

五、報告特定程式的運作。

當系統中執行的程式比較多時,透過程式名稱排序可以幫助管理員找到自己所關心的程式。但這仍然不是最簡單的方式。如現在系統管理員在其它作業系統中發 現有一個叫做threadx的木馬程式在系統後台運行。為此管理員需要在其它電腦上查看是否也有這個木馬程式在運作。此時該如何處理呢?利用排序功能,對程式的名字進行排序(注意不是對程式的PID進行排序,因為即使程式相同,啟動的時間不同或作業系統中已經啟動程式的數量不同,這個PID號碼也就不同。這在一定程度上可以幫助管理員加快程式查找的速度。不過筆者認為,如果系統管理員能夠使用管道符與 grep等查詢命令可能會更快的找到自己所需的應用程式資訊。

如現在系統管理員若使用這個指令ps aux |grep “threadx”,會出現什麼情況呢?首先系統會列出目前系統中所有運行的應用程式(包括前台運行與後台運行的)。然後將輸出的結果通過管道符號|傳遞 給命令grep。然後命令grep就會在ps指令輸出的結果中尋找是否有threadx這個程式在執行的資訊。如果有的話,則會在視窗中顯示這個程式的信 息,而過濾掉其它應用程式的運作資訊。可見採用管道符跟其它查詢命令結合,可以幫助系統管理員在最短的時間內找到自己想了解的應用程式的資訊。

跟一些特殊符號結合還可以實現一些更負責的功能。如跟cat指令結合使用可以統計出符合條件的程式數量。如在指令後面加入>符號,可以將輸出的結 果定位到一個檔案中。如跟通配符結合使用,可以查詢出符合特定條件的一類程序。如也可以查詢出某個程式父程式或其子程式的運作資訊等等。

更多ps指令詳解相關文章請追蹤PHP中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn