linux 中使用top 或 ps 查看進程使用kill殺死進程
1.使用top查看進程:
1、參數詳解
$ top -help
procps-ng version 3.3.9
Usage:
top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
-b:打印所有程序
-c:以命令行的形式顯示程序名
-d:設置刷新間隔時間
-h:顯示幫助
-H:線程切換
-i:不顯示空閑進程
-n:設置刷新幀數,刷新n幀后退出
-p:指定進程號PID,可以指定多個,最多20個,-pN1 -pN2 …或-pN1,N2 [,…]
-s:安全模式,不能使用交互命令
-u:監控用戶,匹配有效ID或用戶名,如監控root用戶,top -uroot;
-U:監控用戶,匹配真實、有效、保存、文件所屬ID或用戶名
-v:打印版本號
2、交互命令
常用命令說明:
Enter:按回車會刷新屏幕;
h:顯示交互命令幫助信息
交互式命令的幫助
Help for Interactive Commands - procps-ng version 3.3.9
窗口1:Def:累計模式關閉。系統:延遲3.0秒;安全模式。
Window 1:Def: Cumulative mode Off. System: Delay 3.0 secs; Secure mode Off.
Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
l,t,m Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width
L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify
c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
x,y . Toggle highlights: 'x' sort field; 'y' running tasks
z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
C,... . Toggle scroll coordinates msg for: up,down,left,right,home,end
k,r Manipulate tasks: 'k' kill; 'r' renice
d or s Set update interval
W,Y Write configuration file 'W'; Inspect other output 'Y'
q Quit
( commands shown with '.' require a visible task display window )
Press 'h' or '?' for help with Windows,
Type 'q' or <Esc> to continue
#Z:設置顏色,進入設置顏色窗口后,a和w用來切換顏色設置,Enter提出
Help for color mapping - procps-ng version 3.3.9
current window: 1:Def
color - 04:25:44 up 8 days, 50 min, 7 users, load average:
Tasks: 64 total, 2 running, 62 sleeping, 0 stopped,
%Cpu(s): 76.5 user, 11.2 system, 0.0 nice, 12.3 idle
Nasty Message! -or- Input Prompt
PID TTY PR NI %CPU TIME+ VIRT SWAP S COMMAND
17284 pts/2 8 0 0.0 0:00.75 1380 0 S /bin/bash
8601 pts/1 7 -10 0.4 0:00.03 916 0 R color -b -z
11005 ? 9 0 0.0 0:02.50 2852 1008 S amor -sessi
available toggles: B =disable bold globally (Off),
z =color/mono (On), b =tasks "bold"/reverse (On)
1) Select a target as an upper case letter, current target is T :
S = Summary Data, M = Messages/Prompts,
H = Column Heads, T = Task Information
2) Select a color as a number, current color is 1 :
0 = black, 1 = red, 2 = green, 3 = yellow,
4 = blue, 5 = magenta, 6 = cyan, 7 = white
3) Then use these keys when finished:
'q' to abort changes to window '1:Def'
'a' or 'w' to commit & change another, <Enter> to commit and end
#E、e:分別切換摘要和任務列表中內存的的單位(KiB、MiB、GiB、TiB、PiB、EiB);
#l:顯示或隱藏摘要中的平均負載;
#t:顯示或隱藏摘要中的cpu統計數據
#m:顯示或隱藏摘要中的內存統計數據
#F、f:窗口字段管理,上下鍵移動、方向鍵中右鍵選中后可以移動該字段(左鍵撤銷)、空格或d選擇是否顯示
Fields Management for window 1:Def, whose current sort field is %CPU
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id DATA = Data+Stack (KiB)
* USER = Effective User Name nMaj = Major Page Faults
* PR = Priority nMin = Minor Page Faults
* NI = Nice Value nDRT = Dirty Pages Count
* VIRT = Virtual Image (KiB) WCHAN = Sleeping in Function
* RES = Resident Size (KiB) Flags = Task Flags <sched.h>
* SHR = Shared Memory (KiB) CGROUPS = Control Groups
* S = Process Status SUPGIDS = Supp Groups IDs
* %CPU = CPU Usage SUPGRPS = Supp Groups Names
* %MEM = Memory Usage (RES) TGID = Thread Group Id
* TIME+ = CPU Time, hundredths ENVIRON = Environment vars
* COMMAND = Command Name/Line vMj = Major Faults delta
PPID = Parent Process pid vMn = Minor Faults delta
UID = Effective User Id USED = Res+Swap Size (KiB)
RUID = Real User Id nsIPC = IPC namespace Inode
RUSER = Real User Name nsMNT = MNT namespace Inode
SUID = Saved User Id nsNET = NET namespace Inode
SUSER = Saved User Name nsPID = PID namespace Inode
GID = Group Id nsUSER = USER namespace Inode
GROUP = Group Name nsUTS = UTS namespace Inode
PGRP = Process Group Id
TTY = Controlling Tty
TPGID = Tty Process Grp Id
SID = Session Id
nTH = Number of Threads
P = Last Used Cpu (SMP)
TIME = CPU Time
SWAP = Swapped Size (KiB)
CODE = Code Size (KiB)
#X:設置任務列表之間的寬度
#L:搜索字段;
#&:搜索下一個字段;
#<、>:顯示上一頁、下一頁
#R:升序或降序顯示任務列表;
#H:進程和線程切換;
#V:樹形顯示,(顯示內容沒看懂)
#J:字段左對齊或右對齊切換;
#c:程序名和命令行格式切換;
#i:空閑程序顯示或隱藏的切換;
#x:高亮顯示排序字段;
#y:高亮顯示正在運行的任務;
Toggle: ‘z’ color/mono; ‘b’ bold/reverse (only if ‘x’ or ‘y’)
#z:彩色顯示或單色顯示的切換;
#b:當設置了x或y,即高亮顯示時,再加上b,就會將高亮的帶背景色;
#u、U:過濾有效或任何用戶;
#n、#:設置最多顯示的任務數,0表示不限制;
#C:顯示坐標;
#k:殺死指定PID的進程;
#r:調整優先級;
#d、s:設置間隔時間;
#W:寫入配置文件;
#Y:寫入配置文件,并重新加載
#q:退出
3、顯示信息詳解
top - 15:00:44 up 6 min, 3 users, load average: 0.21, 0.48, 0.30
Tasks: 194 total, 1 running, 193 sleeping, 0 stopped, 0 zombie
%Cpu(s): 12.8 us, 5.1 sy, 0.0 ni, 82.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 4046976 total, 1182232 used, 2864744 free, 59872 buffers
KiB Swap: 4191228 total, 0 used, 4191228 free. 462400 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2308 zet 20 0 1271772 186756 67412 S 7.6 4.6 0:29.29 compiz
1300 root 20 0 373560 108052 31176 S 4.3 2.7 0:08.53 Xorg
2738 zet 20 0 599960 34704 26408 S 4.3 0.9 0:01.74 gnome-terminal
1937 zet 20 0 121840 3208 2836 S 0.7 0.1 0:00.96 VBoxClient
97 root 20 0 0 0 0 S 0.3 0.0 0:00.16 kworker/u2:4
1960 zet 20 0 40196 3512 2164 S 0.3 0.1 0:00.67 dbus-daemon
2835 zet 20 0 30604 3448 2912 R 0.3 0.1 0:00.05 top
1 root 20 0 33792 4312 2684 S 0.0 0.1 0:01.78 init
第一行:top - 15:00:44 up 6 min, 3 users, load average: 0.21, 0.48, 0.30
15:00:44 — 當前系統時間
up 6 min — 系統運行時間(在這期間沒有重啟過)
3 users — 當前有3個用戶登錄系統, load average: 0.21, 0.48, 0.30
load average: 0.21, 0.48, 0.30 — load average后面的三個數分別是5分鐘、10分鐘、15分鐘的負載情況。
load average數據是每隔5秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高于5的時候就表明系統在超負荷運轉了。
第二行:Tasks: 194 total, 1 running, 193 sleeping, 0 stopped, 0 zombie
Tasks — 任務(進程),系統現在共有194 個進程,其中處于運行中的有1個,193 個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵尸)的有0個。
第三行:%Cpu(s): 12.8 us, 5.1 sy, 0.0 ni, 82.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
12.8 us — 用戶空間占用CPU的百分比。
5.1 sy — 內核空間占用CPU的百分比。
0.0 ni — 改變過優先級的進程占用CPU的百分比
82.2 id id — 空閑CPU百分比
0.0 wa — IO等待占用CPU的百分比
0.0 hi — 硬中斷(Hardware IRQ)占用CPU的百分比
0.0 si — 軟中斷(Software Interrupts)占用CPU的百分比
0.0 st —超級管理進程占用CPU的百分比
第四行:KiB Mem: 4046976 total, 1182232 used, 2864744 free, 59872 buffers
內存使用情況:
4046976 total — 物理內存總量
1182232 used — 使用中的內存總量
2864744 free — 空閑內存總量
59872 buffers — 緩存的內存量
第五行:KiB Swap: 4191228 total, 0 used, 4191228 free. 462400 cached Mem
交換分區:
4191228 total — 交換區總量
0 used — 使用的交換區總量
4191228 free — 空閑交換區總量
462400 cached — 緩沖的交換區總量
第六行:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
各個進程的監控情況:
PID— 進程ID
USER— 進程所有者的實際用戶名。
PR— 進程的調度優先級。這個字段的一些值是’rt’。這意味這這些進程運行在實時態。
NI— 進程的nice值(優先級)。越小的值意味著越高的優先級。負值表示高優先級,正值表示低優先級
VIRT— 進程使用的虛擬內存。進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES— 駐留內存大小。駐留內存是任務使用的非交換物理內存大小。進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR— SHR是進程使用的共享內存。共享內存大小,單位kb
S— 這個是進程的狀態。它有以下不同的值:
D - 不可中斷的睡眠態。
R – 運行態
S – 睡眠態
T – 被跟蹤或已停止
Z – 僵尸態
%CPU— 自從上一次更新時到現在任務所使用的CPU時間百分比。
%MEM— 進程使用的可用物理內存百分比。
TIME+— 任務啟動后到現在所使用的全部CPU時間,精確到百分之一秒。
COMMAND— 運行進程所使用的命令。進程名稱(命令名/命令行)
---------------------
2.使用ps命令查看進程
$ ps -ef
……
smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal
smx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helper
smx 1824 1822 0 11:38 pts/0 00:00:02 bash
smx 1827 1 4 11:38 ? 00:26:28 /usr/lib/firefox-3.6.18/firefox-bin
smx 1857 1822 0 11:38 pts/1 00:00:00 bash
smx 1880 1619 0 11:38 ? 00:00:00 update-notifier
……
smx 11946 1824 0 21:41 pts/0 00:00:00 ps -ef
或者:
$ ps -aux
……
smx 1822 0.1 0.8 58484 18152 ? Sl 11:38 0:49 gnome-terminal
smx 1823 0.0 0.0 1988 712 ? S 11:38 0:00 gnome-pty-helper
smx 1824 0.0 0.1 6820 3776 pts/0 Ss 11:38 0:02 bash
smx 1827 4.3 5.8 398196 119568 ? Sl 11:38 26:13 /usr/lib/firefox-3.6.18/firefox-bin
smx 1857 0.0 0.1 6688 3644 pts/1 Ss 11:38 0:00 bash
smx 1880 0.0 0.6 41536 12620 ? S 11:38 0:00 update-notifier
……
smx 11953 0.0 0.0 2716 1064 pts/0 R+ 21:42 0:00 ps -aux
3.下面演示如何殺死進程
此時如果我想殺了火狐的進程就在終端輸入:
$ kill -s 9 1827
其中-s 9 制定了傳遞給進程的信號是9,即強制、盡快終止進程。各個終止信號及其作用見附錄。
1827則是上面ps查到的火狐的PID。
簡單吧,但有個問題,進程少了則無所謂,進程多了,就會覺得痛苦了,無論是ps -ef 還是ps -aux,每次都要在一大串進程信息里面查找到要殺的進程,看的眼都花了。
進階篇:
改進1:
把ps的查詢結果通過管道給grep查找包含特定字符串的進程。管道符“|”用來隔開兩個命令,管道符左邊命令的輸出會作為管道符右邊命令的輸入。
$ ps -ef | grep firefox
smx 1827 1 4 11:38 ? 00:27:33 /usr/lib/firefox-3.6.18/firefox-bin
smx 12029 1824 0 21:54 pts/0 00:00:00 grep --color=auto firefox
這次就清爽了。然后就是
$kill -s 9 1827
還是嫌打字多?
改進2——使用pgrep:
一看到pgrep首先會想到什么?沒錯,grep!pgrep的p表明了這個命令是專門用于進程查詢的grep。
$ pgrep firefox
1827
看到了什么?沒錯火狐的PID,接下來又要打字了:
$kill -s 9 1827
改進3——使用pidof:
看到pidof想到啥?沒錯pid of xx,字面翻譯過來就是 xx的PID。
$ pidof firefox-bin
1827
和pgrep相比稍顯不足的是,pidof必須給出進程的全名。然后就是老生常談:
$kill -s 9 1827
無論使用ps 然后慢慢查找進程PID 還是用grep查找包含相應字符串的進程,亦或者用pgrep直接查找包含相應字符串的進程PID,然后手動輸入給kill殺掉,都稍顯麻煩。有沒有更方便的方法?有!
改進4:
$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9
說明:
“grep firefox”的輸出結果是,所有含有關鍵字“firefox”的進程。
“grep -v grep”是在列出的進程中去除含有關鍵字“grep”的進程。
“cut -c 9-15”是截取輸入行的第9個字符到第15個字符,而這正好是進程號PID。
“xargs kill -s 9”中的xargs命令是用來把前面命令的輸出結果(PID)作為“kill -s 9”命令的參數,并執行該命令?!発ill -s 9”會強行殺掉指定進程。
難道你不想抱怨點什么?沒錯太長了
改進5:
知道pgrep和pidof兩個命令,干嘛還要打那么長一串!
$ pgrep firefox | xargs kill -s 9
改進6:
$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9
kill: No such process
有一個比較郁悶的地方,進程已經正確找到并且終止了,但是執行完卻提示找不到進程。
其中awk '{print $2}' 的作用就是打印(print)出第二列的內容。根據常規篇,可以知道ps輸出的第二列正好是PID。就把進程相應的PID通過xargs傳遞給kill作參數,殺掉對應的進程。
改進7:
難道每次都要調用xargs把PID傳遞給kill?答案是否定的:
$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`
改進8:
沒錯,命令依然有點長,換成pgrep。
$kill -s 9 `pgrep firefox`
改進9——pkill:
看到pkill想到了什么?沒錯pgrep和kill!pkill=pgrep+kill。
$pkill -9 firefox
說明:"-9" 即發送的信號是9,pkill與kill在這點的差別是:pkill無須 “s”,終止信號等級直接跟在 “-“ 后面。之前我一直以為是 "-s 9",結果每次運行都無法終止進程。
改進10——killall:
killall和pkill是相似的,不過如果給出的進程名不完整,killall會報錯。pkill或者pgrep只要給出進程名的一部分就可以終止進程。
$killall -9 firefox
OK,講到這里大家應該了解了吧!