KILL 命令
Linux中的kill命令用來終止指定的進程(terminate a process)的運行伤提,是Linux下進程管理的常用命令。通常认烁,終止一個前臺進程可以使用Ctrl+C鍵肿男,但是,對于一個后臺進程就須用kill命令來終止却嗡,我們就需要先使用ps/pidof/pstree/top等工具獲取進程PID舶沛,然后使用kill命令來殺掉該進程。kill命令是通過向進程發(fā)送指定的信號來結(jié)束相應進程的窗价。在默認情況下如庭,采用編號為15的TERM信號。TERM信號將終止所有不能捕獲該信號的進程撼港。對于那些可以捕獲該信號的進程就要用編號為9的kill信號坪它,強行“殺掉”該進程骤竹。
- 1.命令格式:kill[參數(shù)][進程id]
- 2.命令參數(shù)
-l 信號,若果不加信號的編號參數(shù)往毡,則使用“-l”參數(shù)會列出全部的信號名稱
-a 當處理當前進程時蒙揣,不限制命令名和進程號的對應關系
-p 指定kill 命令只打印相關進程的進程號,而不發(fā)送任何信號
-s 指定發(fā)送信號
-u 指定用戶
介紹:
- 1开瞭、kill命令可以帶信號號碼選項懒震,也可以不帶。如果沒有信號號碼惩阶,kill命令就會發(fā)出終止信號(15)挎狸,這個信號可以被進程捕獲,使得進程在退出之前可以清理并釋放資源断楷。也可以用kill向進程發(fā)送特定的信號锨匆。例如:
kill -2 123
它的效果等同于在前臺運行PID為123的進程時按下Ctrl+C鍵。但是冬筒,普通用戶只能使用不帶signal參數(shù)的kill命令或最多使用-9信號恐锣。 - 2、kill可以帶有進程ID號作為參數(shù)舞痰。當用kill向這些進程發(fā)送信號時土榴,必須是這些進程的主人。如果試圖撤銷一個沒有權(quán)限撤銷的進程或撤銷一個不存在的進程响牛,就會得到一個錯誤信息玷禽。
- 3、可以向多個進程發(fā)信號或終止它們呀打。
- 4矢赁、當kill成功地發(fā)送了信號后,shell會在屏幕上顯示出進程的終止信息贬丛。有時這個信息不會馬上顯示撩银,只有當按下Enter鍵使shell的命令提示符再次出現(xiàn)時,才會顯示出來豺憔。
- 5额获、應注意,信號使進程強行終止恭应,這常會帶來一些副作用抄邀,如數(shù)據(jù)丟失或者終端無法恢復到正常狀態(tài)。發(fā)送信號時必須小心昼榛,只有在萬不得已時境肾,才用kill信號(9),因為進程不能首先捕獲它。要撤銷所有的后臺作業(yè)准夷,可以輸入kill 0。因為有些在后臺運行的命令會啟動多個進程莺掠,跟蹤并找到所有要殺掉的進程的PID是件很麻煩的事衫嵌。這時,使用kill 0來終止所有由當前shell啟動的進程楔绞,是個有效的方法。
3.示例
實例1:列出所有信號名稱
命令:kill -l
輸出:
[root@localhost test6]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
說明:
只有第9種信號(SIGKILL)才可以無條件終止進程唇兑,其他信號進程都有權(quán)利忽略酒朵。 下面是常用的信號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(xù)(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
實例2:得到指定信號的數(shù)值
[root@localhost test6]# kill -l KILL
[root@localhost test6]# kill -l SIGKILL
[root@localhost test6]# kill -l TERM
[root@localhost test6]# kill -l SIGTERM
[root@localhost test6]#
實例3:先用ps查找進程扎附,然后用kill殺掉
命令:kill 3268
[root@localhost test6]# ps -ef|grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@localhost test6]# kill 3268
實例4:徹底殺死進程
命令:kill –9 3268 // -9 強制殺掉進程
ps: init是Linux系統(tǒng)操作中不可缺少的程序之一蔫耽。所謂的init進程,它是一個由內(nèi)核啟動的用戶級進程留夜。內(nèi)核自行啟動(已經(jīng)被載入內(nèi)存匙铡,開始運行,并已初始化所有的設備驅(qū)動程序和數(shù)據(jù)結(jié)構(gòu)等)之后碍粥,就通過啟動一個用戶級程序init的方式鳖眼,完成引導進程。所以,init始終是第一個進程(其進程編號始終為1)嚼摩。 其它所有進程都是init進程的子孫钦讳。init進程是不可殺的!
killall 命令
Linux系統(tǒng)中的killall命令用于殺死指定名字的進程(kill processes by name)枕面。我們可以使用kill命令殺死指定進程PID的進程愿卒,如果要找到我們需要殺死的進程,我們還需要在之前使用ps等命令再配合grep來查找進程膊畴,而killall把這兩個過程合二為一掘猿,是一個很好用的命令。
- 1.命令格式:killall[參數(shù)][進程名]
- 2.命令參數(shù)
-Z 只殺死擁有scontext 的進程
-e 要求匹配進程名稱
-I 忽略小寫
-g 殺死進程組而不是進程
-i 交互模式唇跨,殺死進程前先詢問用戶
-l 列出所有的已知信號名稱
-q 不輸出警告信息
-s 發(fā)送指定的信號
-v 報告信號是否成功發(fā)送
-w 等待進程死亡
--help 顯示幫助信息
--version 顯示版本顯示
3.范例
1:殺死所有同名進程
killall nginx
killall -9 bash
2.向進程發(fā)送指定信號
killall -TERM ngixn 或者 killall -KILL nginx
PKILL命令
pkill 和killall 應用方法差不多稠通,也是直接殺死運行中的程式;如果你想殺掉單個進程买猖,請用kill 來殺掉改橘。
應用方法:#pkill 正在運行的程式名
遇到一個問題:
在使用時,在ubuntu18.04下操作uwsgi進程
使用killall -9 uwsgi命令無效
使用pkill -9 uwsgi命令成功
不知道什么原因...