Linux中的kill命令用來終止指定的進程(terminate a process)的運行,是Linux下進程管理的經常使用命令。 一般,終止一個前臺進程可使用Ctrl+C鍵,可是,對於一個後臺進程就須用kill命令來終止,咱們就須要先使用ps/pidof/pstree/top等工具獲取進程PID,而後使用kill命令來殺掉該進程。kill命令是經過向進程發送指定的信號來結束相應進程的。 在默認狀況下,採用編號爲15的TERM信號。TERM信號將終止全部不能捕獲該信號的進程。 對於那些能夠捕獲該信號的進程就要用編號爲9的kill信號,強行「殺掉」該進程。
1.命令格式: kill[參數][進程號]linux
2.命令功能: 發送指定的信號到相應進程。 不指定型號將發送SIGTERM(15)終止指定進程。 若是任沒法終止該程序可用「-KILL」 參數,其發送的信號爲SIGKILL(9) ,將強制結束進程,使用ps命令或者jobs 命令能夠查看進程號。 root用戶將影響用戶的進程,非root用戶只能影響本身的進程。shell
3.命令參數: -l 信號,若果不加信號的編號參數,則使用「-l」參數會列出所有的信號名稱 -a 當處理當前進程時,不限制命令名和進程號的對應關係 -p 指定kill 命令只打印相關進程的進程號,而不發送任何信號 -s 指定發送信號 -u 指定用戶 注意: 一、kill命令能夠帶信號號碼選項,也能夠不帶。若是沒有信號號碼,kill命令就會發出終止信號(15),這個信號能夠被進程捕獲,使得進程在退出以前能夠清理並釋放資源。也能夠用kill向進程發送特定的信號。例如: kill -2 123 它的效果等同於在前臺運行PID爲123的進程時按下Ctrl+C鍵。可是,普通用戶只能使用不帶signal參數的kill命令或最多使用-9信號。 二、kill能夠帶有進程ID號做爲參數。當用kill向這些進程發送信號時,必須是這些進程的主人。若是試圖撤銷一個沒有權限撤銷的進程或撤銷一個不存在的進程,就會獲得一個錯誤信息。 三、能夠向多個進程發信號或終止它們。 四、當kill成功地發送了信號後,shell會在屏幕上顯示出進程的終止信息。有時這個信息不會立刻顯示,只有當按下Enter鍵使shell的命令提示符再次出現時,纔會顯示出來。 五、應注意,信號使進程強行終止,這常會帶來一些反作用,如數據丟失或者終端沒法恢復到正常狀態。發送信號時必須當心,只有在萬不得已時,才用kill信號(9),由於進程不能首先捕獲它。要撤銷全部的後臺做業,能夠輸入kill 0。由於有些在後臺運行的命令會啓動多個進程,跟蹤並找到全部要殺掉的進程的PID是件很麻煩的事。這時,使用kill 0來終止全部由當前shell啓動的進程,是個有效的方法。vim
4.使用實例:bash
實例1:列出全部信號名稱 命令: kill -l 輸出: [root@localhost test6]# kill -l數據結構
實例2:獲得指定信號的數值 命令: 輸出: [root@localhost test6]# kill -l KILL 9[root@localhost test6]# kill -l SIGKILL 9[root@localhost test6]# kill -l TERM 15[root@localhost test6]# kill -l SIGTERM 15[root@localhost test6]# 說明:svn
實例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 [root@localhost test6]# kill 3268 -bash: kill: (3268) - 沒有那個進程 [root@localhost test6]# 說明:工具
實例4:完全殺死進程 命令: kill –9 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 –9 3268 [root@localhost test6]# kill 3268 -bash: kill: (3268) - 沒有那個進程 [root@localhost test6]# 說明:code
實例5:殺死指定用戶全部進程 命令: kill -9 $(ps -ef | grep peidalinux) kill -u peidalinux 輸出: [root@localhost ~]# kill -9 $(ps -ef | grep peidalinux) [root@localhost ~]# kill -u peidalinux 說明: 方法一,過濾出hnlinux用戶進程並殺死進程
實例6:init進程是不可殺的 命令: kill -9 1 輸出: [root@localhost ~]# ps -ef|grep init root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17563 17534 0 17:37 pts/1 00:00:00 grep init [root@localhost ~]# kill -9 1 [root@localhost ~]# kill -HUP 1 [root@localhost ~]# ps -ef|grep init root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17565 17534 0 17:38 pts/1 00:00:00 grep init [root@localhost ~]# kill -KILL 1 [root@localhost ~]# ps -ef|grep init root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17567 17534 0 17:38 pts/1 00:00:00 grep init [root@localhost ~]#內存
說明: init是Linux系統操做中不可缺乏的程序之一。所謂的init進程,它是一個由內核啓動的用戶級進程。內核自行啓動(已經被載入內存,開始運行,並已初始化全部的設備驅動程序和數據結構等)以後,就經過啓動一個用戶級程序init的方式,完成引導進程。因此,init始終是第一個進程(其進程編號始終爲1)。 其它全部進程都是init進程的子孫。init進程是不可殺的!
*** 注:
上圖:我想關閉svnserve進程,killall svnserve命令的意思就是關閉所有svnserve的有關進程