自學Linux Shell4.1-監測程序ps top kill

點擊返回 自學Linux命令行與Shell腳本之路html

4.1-監測程序ps top kill

1. PS命令

linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,若是想要動態的顯示進程信息,就可使用top命令。使用該命令能夠肯定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多的資源等等。mysql

ps的3種不一樣類型的命令行參數linux

  • UNIX 風格,選項能夠組合在一塊兒,而且選項前必須有「-」連字符(主要此風格)
  • BSD 風格,選項能夠組合在一塊兒,可是選項前不能有「-」連字符  
  • GNU 風格的長選項,選項前有兩個「-」連字符  

ps參數:sql

  • -A    列出全部的進程
  • -w    顯示加寬能夠顯示較多的資訊
  • -au    顯示較詳細的資訊
  • -aux    顯示全部包含其餘使用者的行程
  • -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 aux      查看系統全部的進程數據  
  • ps ax        查看不與terminal有關的全部進程  
  • ps -lA        查看系統全部的進程數據  
  • ps axjf      查看連同一部分進程樹狀態  

  • USER    用戶名
  • UID    用戶ID(User ID)
  • PID    進程ID(Process ID)
  • %CPU    進程的cpu佔用率
  • %MEM    進程的內存佔用率
  • VSZ    進程所使用的虛存的大小(Virtual Size)
  • RSS    進程使用的駐留集大小或者是實際內存的大小,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 低優先    級進程              低優先序的進程
    L 內存鎖頁    Lock               有記憶體分頁分配並縮在記憶體內
    s 進程的領導者(在它之下有子進程);
    l 多進程的(使用 CLONE_THREAD, 相似 NPTL pthreads)
    + 位於後臺的進程組 
  • START    進程啓動時間和日期
  • TIME    進程使用的總cpu時間
  • COMMAND    正在執行的命令行命令

 ps -lapache

  • F 內核分配給進程的系統標記
  • S 進程的狀態
  • PPID 父進程的進程號
  • NI    優先級(Nice)
  • PRI    進程優先級編號(Priority)
  • ADDR 進程的內存地址
  • SZ  假如進程被換出,所需交換空間的大體大小
  • WCHAN    進程正在睡眠的內核函數名稱;該函數的名稱是從/root/system.map文件中得到的。

 ps -ef  參數組合使用數組

 

2. top命令

top命令是Linux下經常使用的性能分析工具,可以實時顯示系統中各個進程的資源佔用情況,經常使用於服務端性能分析。緩存

top命令的結果分爲兩個部分:服務器

  • 統計信息:前五行是系統總體的統計信息;
  • 進程信息:統計信息下方相似表格區域顯示的是各個進程的詳細信息,默認5秒刷新一次。

統計信息說明:ide

    • 第1行:Top 任務隊列信息(系統運行狀態及平均負載),與uptime命令結果相同。 
      • 第1段:系統當前時間,例如:16:07:37
      • 第2段:系統運行時間,未重啓的時間,時間越長系統越穩定。 
        • 格式:up xx days, HH:MM
        • 例如:241 days, 20:11, 表示連續運行了241天20小時11分鐘
      • 第3段:當前登陸用戶數,例如:1 user,表示當前只有1個用戶登陸
      • 第4段:系統負載,即任務隊列的平均長度,3個數值分別統計最近1,5,15分鐘的系統平均負載 
        • 系統平均負載:單核CPU狀況下,0.00 表示沒有任何負荷,1.00表示恰好滿負荷,超過1側表示超負荷,理想值是0.7;
        • 多核CPU負載:CPU核數 * 理想值0.7 = 理想負荷,例如:4核CPU負載不超過2.8何表示沒有出現高負載。
    • 第2行:Tasks 進程相關信息 
      • 第1段:進程總數,例如:Tasks: 231 total, 表示總共運行231個進程
      • 第2段:正在運行的進程數,例如:1 running,
      • 第3段:睡眠的進程數,例如:230 sleeping,
      • 第4段:中止的進程數,例如:0 stopped,
      • 第5段:殭屍進程數,例如:0 zombie
    • 第3行:Cpus CPU相關信息,若是是多核CPU,按數字1可顯示各核CPU信息,此時1行將轉爲Cpu核數行,數字1能夠來回切換。 
      • 第1段:us 用戶空間佔用CPU百分比,例如:Cpu(s): 12.7%us,
      • 第2段:sy 內核空間佔用CPU百分比,例如:8.4%sy,
      • 第3段:ni 用戶進程空間內改變過優先級的進程佔用CPU百分比,例如:0.0%ni,
      • 第4段:id 空閒CPU百分比,例如:77.1%id,
      • 第5段:wa 等待輸入輸出的CPU時間百分比,例如:0.0%wa,
      • 第6段:hi CPU服務於硬中斷所耗費的時間總額,例如:0.0%hi,
      • 第7段:si CPU服務於軟中斷所耗費的時間總額,例如:1.8%si,
      • 第8段:st Steal time 虛擬機被hypervisor偷去的CPU時間(若是當前處於一個hypervisor下的vm,實際上hypervisor也是要消耗一部分CPU處理時間的)
    • 第4行:Mem 內存相關信息(Mem: 12196436k total, 12056552k used, 139884k free, 64564k buffers) 
      • 第1段:物理內存總量,例如:Mem: 12196436k total,
      • 第2段:使用的物理內存總量,例如:12056552k used,
      • 第3段:空閒內存總量,例如:Mem: 139884k free,
      • 第4段:用做內核緩存的內存量,例如:64564k buffers
    • 第5行:Swap 交換分區相關信息(Swap: 2097144k total, 151016k used, 1946128k free, 3120236k cached) 
      • 第1段:交換區總量,例如:Swap: 2097144k total,
      • 第2段:使用的交換區總量,例如:151016k used,
      • 第3段:空閒交換區總量,例如:1946128k free,
      • 第4段:緩衝的交換區總量,3120236k cached
  • A: PID = (Process Id) 進程Id;
  • E: USER = (User Name) 進程全部者的用戶名;
  • H: PR = (Priority) 優先級
  • I: NI = (Nice value) nice值。負值表示高優先級,正值表示低優先級
  • O: VIRT = (Virtual Image (kb)) 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
  • Q: RES = (Resident size (kb)) 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
  • T: SHR = (Shared Mem size (kb)) 共享內存大小,單位kb
  • W: S = (Process Status) 進程狀態。D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/中止,Z=殭屍進程
  • K: %CPU = (CPU usage) 上次更新到如今的CPU時間佔用百分比
  • N: %MEM = (Memory usage (RES)) 進程使用的物理內存百分比
  • M: TIME+ = (CPU Time, hundredths) 進程使用的CPU時間總計,單位1/100秒
  • X: COMMAND = (Command name/line) 命令名/命令行

top命令選項

  • -b:以批處理模式操做;
  • -c:顯示完整的治命令;
  • -d:屏幕刷新間隔時間;
  • -I:忽略失效過程;
  • -s:保密模式;
  • -S:累積模式;
  • -i<時間>:設置間隔時間;
  • -u<用戶名>:指定用戶名;
  • -p<進程號>:指定進程;
  • -n<次數>:循環顯示的次數。

3. kill命令

終止進程的工具 kill 、killall、pkill、xkill

終止一個進程或終止一個正在運行的程序,通常是經過 kill 、killall、pkill、xkill 等進行。好比一個程序已經死掉,但又不能退出,這時就應該考慮應用這些工具。

另外應用的場合就是在服務器管理中,在不涉及數據庫服務器程序的父進程的中止運行,也能夠用這些工具來終止。爲何數據庫服務器的父進程不能用這些工具殺死呢?緣由很簡單,這些工具在強行終止數據庫服務器時,會讓數據庫產生更多的文件碎片,當碎片達到必定程度的時候,數據庫就有崩潰的危險。好比mysql服務器最好是按其正常的程序關閉,而不是用pkill mysqld 或killall mysqld 這樣危險的動做;固然對於佔用資源過多的數據庫子進程,咱們應該用kill 來殺掉。

3.1  kill     kill的應用是和ps 或pgrep 命令結合在一塊兒使用的;

kill [信號代碼]    進程ID

  • -l <信息編號>  若不加<信息編號>選項,則-l參數會列出所有的信息名稱。
  • -s <信息名稱或編號>  指定要送出的信息。
  • [程序]  [程序]能夠是程序的PID或是PGID,也能夠是工做編號。

注:信號代碼能夠省略;咱們經常使用的信號代碼是 -9 ,表示強制終止;

舉例:

[root@localhost ~]# ps auxf |grep httpd

root 4939 0.0 0.0 5160 708 pts/3 S+ 13:10 0:00 /_ grep httpd

root 4830 0.1 1.3 24232 10272 ? Ss 13:02 0:00 /usr/sbin/httpd

apache 4833 0.0 0.6 24364 4932 ? S 13:02 0:00 /_ /usr/sbin/httpd

apache 4834 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd

apache 4835 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd

apache 4836 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd

apache 4840 0.0 0.6 24364 4928 ? S 13:02 0:00 /_ /usr/sbin/httpd


咱們看上面例子中的第二列,就是進程PID的列,其中4830是httpd服務器的父進程,從4833-4840的進程都是它4830的子進程;若是咱們殺掉父進程4830的話,其下的子進程也會跟着死掉;

[root@localhost ~]# kill 4840 注:殺掉4840這個進程;

[root@localhost ~]# ps -auxf |grep httpd 注:查看一下會有什麼結果?是否是httpd服務器仍在運行?

[root@localhost ~]# kill 4830 注:殺掉httpd的父進程;

[root@localhost ~]# ps -aux |grep httpd 注:查看httpd的其它子進程是否存在,httpd服務器是否仍在運行?


對於殭屍進程,能夠用kill -9 來強制終止退出;

好比一個程序已經完全死掉,若是kill 不加信號強度是沒有辦法退出,最好的辦法就是加信號強度 -9 ,後面要接殺父進程;好比;

[root@localhost ~]# ps aux |grep gaim

beinan 5031 9.0 2.3 104996 17484 ? S 13:23 0:01 gaim

root 5036 0.0 0.0 5160 724 pts/3 S+ 13:24 0:00 grep gaim

或 [root@localhost ~]# pgrep -l gaim

5031 gaim

[root@localhost ~]# kill -9 5031

2. killall

killall 經過程序的名字,直接殺死全部進程

用法:killall 正在運行的程序名                                    killall 也和ps或pgrep 結合使用,比較方便;經過ps或pgrep 來查看哪些程序在運行;

舉例:

[root@localhost beinan]# pgrep -l gaim

2979 gaim

[root@localhost beinan]# killall gaim

3. pkill

pkill 和killall 應用方法差很少,也是直接殺死運行中的程序;若是您想殺掉單個進程,請用kill 來殺掉。

應用方法:     #pkill 正在運行的程序名

舉例:

[root@localhost beinan]# pgrep -l gaim

2979 gaim

[root@localhost beinan]# pkill gaim

4. xkill

xkill 是在桌面用的殺死圖形界面的程序。
好比當firefox 出現崩潰不能退出時,點鼠標就能殺死firefox 。當xkill運行時出來和我的電腦的圖標,哪一個圖形程序崩潰一點就OK了。若是您想終止xkill ,就按右鍵取消;

xkill 調用方法:

[root@localhost ~]# xkill

相關文章
相關標籤/搜索