Linux進程管理 - ps,top,pstree,signal,kill,killall舉例演示

ps:將某個時間點的進程執行狀況擷取下來

[root@www ~]# ps aux  <==觀察系統所有的進程數據
[root@www ~]# ps -lA  <==也是能夠觀察所有系統的數據
[root@www ~]# ps axjf <==連同部分進程樹狀態
選項與參數:
-A  :所有的 process 均顯示出來,與 -e 具備相同的效用。
-a  :不與 terminal 有關的所有 process 。
-u  :有效使用者 (effective user) 相關的 process 。
x   :一般與 a 這個參數一塊兒使用。可列出較完整資訊。

輸出格式規劃: l :較長、較具體的將該 PID 的的資訊列出; j :工做的格式 (jobs format) -f :作一個更爲完整的輸出。 vim


ps -l  僅觀察本身的bash相關程序

    eg1:將眼下屬於本身此次登陸的PID與相關諮詢列出來(僅僅與本身的bash有關)bash


        使用ps -l 僅列出與你的bash有關的進程而已,ps -l 顯示的數據有:網絡

    F:表明這個進程標識 (process flags),說明這個進程的總結權限。常見號碼有:
        若爲 4 表示此進程的權限爲 root ;
        若爲 1 則表示此子進程僅進行復制(fork)而沒有實際執行(exec)。

    S:表明這個進程的狀態 (STAT),基本的狀態有:
        R (Running):該進程正在執行中;
        S (Sleep):該進程眼下正在睡眠狀態(idle),但可以被喚醒(signal)。spa


        D :不可被喚醒的睡眠狀態,一般這支進程可能在等待 I/O 的狀況(ex>列印)
        T :中止狀態(stop)。多是在工做控制(背景暫停)或除錯 (traced) 狀態;
        Z (Zombie):殭屍狀態,進程已經終止但卻沒法被移除至內存外。

    UID/PID/PPID:表明『此進程被該 UID 所擁有/進程的 PID 號碼/此進程的父進程 PID 號碼』

    C:表明 CPU 使用率,單位爲百分比;

    PRI/NI:Priority/Nice 的縮寫,表明此進程被 CPU 所執行的優先順序,數值越小表明該進程越快被 CPU 執行。

    ADDR/SZ/WCHAN:都與內存有關,ADDR 是 kernel function,指出該程序在內存的哪一個部分,假設是個 running 的程序,通常就會顯示『 - 』 / SZ 表明此程序用掉多少內存 / WCHAN 表示眼下程序是否執行中,相同的, 若爲 - 表示正在執行中。code



    TTY:登錄者的終端機位置,若爲遠程登錄則使用動態終端介面 (pts/n);

    TIME:使用掉的 CPU 時間,注意。是此進程實際花費 CPU 執行的時間,而不是系統時間;

    CMD:就是 command 的縮寫,形成此進程的觸發進程之命令爲什麼。
orm


ps aus  觀察系統所有進程

eg2:列出眼下所有的正在內存其中的進程:server


。。。排序


ps -l和ps aux顯示的項目並不一樣樣!在ps aux顯示的項目中。每個意義爲:進程

    USER:該 process 屬於那個使用者賬號的?
    PID :該 process 的進程識別碼。內存


    %CPU:該 process 使用掉的 CPU 資源百分比;
    %MEM:該 process 所佔用的實體內存百分比;
    VSZ :該 process 使用掉的虛擬內存量 (Kbytes)
    RSS :該 process 佔用的固定的內存量 (Kbytes)
    TTY :該 process 是在那個終端機上面執行,若與終端機無關則顯示 ?,另外, tty1-tty6 是本機上面的登錄者程序,若爲 pts/0 等等的。則表示爲由網絡鏈接進主機的程序。
    STAT:該進程眼下的狀態。狀態顯示與 ps -l 的 S 旗標一樣 (R/S/T/Z)
    START:該 process 被觸發啓動的時間;
    TIME :該 process 實際使用 CPU 執行的時間。
    COMMAND:該進程的實際命令爲什麼?


ps -lA  顯示所有的進程。顯示方式與ps -l的輸出狀況一樣



ps axjf  列出相似進程樹的程序顯示:




top:動態觀察程序的變化

[root@www ~]# top [-d 數字] | top [-bnp]
選項與參數:
-d  :後面可以接秒數。就是整個進程畫面升級的秒數。默認是 5 秒。
-b  :以批量的方式執行 top ,還有不少其它的參數可以使用喔!

通常會搭配數據流重導向來將批量的結果輸出成爲文件。 -n :與 -b 搭配,意義是,需要進行幾回 top 的輸出結果。 -p :指定某些個 PID 來進行觀察監測而已。 在 top 執行過程其中可以使用的按鍵命令: ? :顯示在 top 其中可以輸入的按鍵命令。 P :以 CPU 的使用資源排序顯示; M :以 Memory 的使用資源排序顯示; N :以 PID 來排序喔! T :由該 Process 使用的 CPU 時間累積 (TIME+) 排序。 k :給予某個 PID 一個訊號 (signal) r :給予某個 PID 又一次制訂一個 nice 值。 q :離開 top 軟件的按鍵。




        top 主要分爲兩個畫面,上面的畫面爲整個系統的資源使用狀態,基本上總共同擁有六行,顯示的內容依序是:

    第一行(top...):這一行顯示的資訊分別爲:
        眼下的時間,亦便是 18:30:00 那個項目;
        啓動到眼下爲止所通過的時間,亦便是 up 4:17 那個項目;
        已經登錄系統的使用者人數。亦便是 2 user項目。
        系統在 1, 5, 15 分鐘的平均工做負載。表明的是 1, 5, 15 分鐘,系統平均要負責執行幾個程序(工做)的意思。

越小表明系統越閒置,若高於 1 得要注意你的系統進程是否太過繁複了!



    第二行(Tasks...):顯示的是眼下進程的總量與個別進程在什麼狀態(running, sleeping, stopped, zombie)。

比較需要注意的是最後的 zombie 那個數值,假設不是 0 。好好看看到底是那個 process 變成殭屍了吧?

    第三行(Cpus...):顯示的是 CPU 的整體負載,每個項目可以使用 ?

查閱。

需要特別注意的是 wa ,那個項目表明的是 I/O wait, 一般你的系統會變慢都是 I/O 產生的問題比較大。所以這裏得要注意這個項目耗用 CPU 的資源喔!

另外,假設是多核心的設備,可以按下數字鍵『1』來切換成不一樣 CPU 的負載率。

    第四行與第五行:表示眼下的實體內存與虛擬內存 (Mem/Swap) 的使用狀況。 再次重申。要注意的是 swap 的使用量要儘可能的少!

假設 swap 被用的很是大量,表示系統的實體內存實在不足!

    第六行:這個是當在 top 程序其中輸入命令時,顯示狀態的地方。


        至於 top 下半部分的畫面,則是每個 process 使用的資源狀況。比較需要注意的是:

    PID :每個 process 的 ID 啦!
    SER:該 process 所屬的使用者。
    PR :Priority 的簡寫,進程的優先執行順序。越小越早被執行。
    NI :Nice 的簡寫。與 Priority 有關,也是越小越早被執行;
    %CPU:CPU 的使用率。
    %MEM:內存的使用率;
    TIME+:CPU 使用時間的累加;

        top 默認使用 CPU 使用率 (%CPU) 做爲排序的重點,假設你想要使用內存使用率排序。則可以按下『M』。 若要回復則按下『P』就能夠。假設想要離開 top 則按下『 q 』


eg:本身的bash PID可由變量$$得到,使用top持續觀察這個PID



ptree

[root@www ~]# pstree [-A|U] [-up]
選項與參數:
-A  :各進程樹之間的鏈接以 ASCII 字節來鏈接;
-U  :各進程樹之間的鏈接以萬國碼的字節來鏈接。

在某些終端介面下可能會有錯誤。 -p :並同一時候列出每個 process 的 PID; -u :並同一時候列出每個 process 的所屬賬號名稱。

eg:列出眼下系統上所有的進程樹的相關性



eg:同一時候顯示PID和users


在括號 () 內的便是 PID 以及該程序的 owner 喔。只是。由於我是使用 

root 的身份執行此一命令。因此屬於 root 的程序就不會顯示出來啦!


進程的管理

        進程之間是可以互相控制的!舉例來講,你可以關閉、又一次啓動server軟件。server軟件自己是個程序, 你既然可以讓她關閉或啓動。固然就是可以控制該進程啦!

那麼進程是怎樣互相管理的呢?事實上是透過給予該進程一個訊號 (signal) 去告知該進程你想要讓她做什麼!


        那麼究竟有多少 signal 呢? 你可以使用 kill -l (小寫的 L ) 或者是 man 7 signal 都可以查詢到。


        基本的訊號代號與名稱相應及內容是:

代號 名稱 內容
1 SIGHUP 啓動被終止的進程。可以讓該 PID 又一次讀取本身的配置檔,相似又一次啓動
2 SIGINT 至關於用鍵盤輸入 [ctrl]-c 來中斷一個進程的進行
9 SIGKILL 表明強制中斷一個進程的進行,假設該進程進行到一半, 那麼還沒有完畢的部分可能會有『半產品』產生,相似 vim會有 .filename.swp 保留下來。

15 SIGTERM 以正常的結束進程來終止該進程。由於是正常的終止, 因此興許的動做會將他完畢。只是,假設該進程已經發生故障,就是沒法使用正常的方法終止時。 輸入這個 signal 也是沒實用的。

17 SIGSTOP 至關於用鍵盤輸入 [ctrl]-z 來暫停一個進程的進行

kill -signal PID

        kill 可以幫咱們將這個 signal 傳送給某個工做 (%jobnumber) 或者是某個 PID (直接輸入數字)。

要再次強調的是: kill 後面直接加數字與加上 %number 的狀況是不一樣的。 這個很是重要喔!因爲工做控制中有 1 號工做。但是 PID 1 號則是專指『 init 』這支進程!

你怎麼可以將 init 關閉呢? 關閉 init 。你的系統就當掉了啊!因此記得那個 % 是專門用在工做控制的喔!

        瞭解了這個使用方法之後。假設將來你想要將某個莫名其妙的登錄者的連線刪除的話,就可以透過使用 pstree -p 找到相關程序, 而後再以 kill -9 將該程序刪除。該條連線就會被踢掉了。


killall -signal 命令名稱

[root@www ~]# killall [-iIe] [command name]
選項與參數:
-i  :interactive 的意思,互動式的。若需要刪除時。會出現提示字節給使用者。
-e  :exact 的意思,表示『後面接的 command name 要一致』,但整個完整的命令
      不能超過 15 個字節。

-I :命令名稱(可能含參數)忽略大寫和小寫。

eg:一次詢問每個bash進程是否需要被終止執行。



        總之,要刪除某個進程。咱們可以使用 PID 或者是啓動該程序的命令名稱, 而假設要刪除某個服務呢?呵呵!最簡單的方法就是利用 killall 。 因爲他可以將系統其中全部以某個命令名稱啓動的程序全部刪除。

相關文章
相關標籤/搜索