使用 kill 命令可以終止進程。通常,終止一個前臺進程可以使用 ctrl+C 鍵,但是對于一個后臺進程就必須使用 kill 命令來終止,我們需要先使用 ps/pidof/pstree/top 等工具獲取進程 PID,然后使用 kill 命令來殺掉進程。kill 命令是通過向進程發(fā)送指定的信號來結束相應進程的。在默認情況下,采用編號為 15 的 TREM 信號。TERM 信號將終止所有不能獲取該信號的進程。對于那些可以獲取該信號的進程就要用編號為 9 的 kill 信號,強行 “殺掉” 該進程。
kill 命令詳解
格式:
kill [參數(shù)] [進程號,也就是 PID]
功能:
發(fā)送指定的信號到相應進程。不指定型號將發(fā)送 SIFTERM(15) 終止指定進程。如果無法終止該進程可以使用“-KILL”參數(shù),其發(fā)送的信號為 SIGKILL(9),將強制結束進程,使用 ps 命令或者 jobs 命令可以查看進程號。root 用戶將影響用戶的進程,非 root 用戶只能影響自己的進程。
注意:
kill 命令可以帶信號號碼選項,也可以不帶。如果沒有信號好嗎,kill 命令就會發(fā)出終止信號 (15),這個信號可以被進程捕獲,是的進程在推出之前可以清理并釋放資源。也可以用 kill 向進程發(fā)送特定的信號。例如:
kill -2 123 // 它的效果等同于在前臺運行 PID 為 123 的進程同時按下 Ctrl+C 鍵。但是,普通用戶只能使用不帶 signal 參數(shù)的 kill 命令或最多使用 -9 信號。
kill 可以帶有進程 ID 號作為參數(shù)。當用 kill 想這些進程發(fā)送信號時,必須是這些進程的主人。如果試圖撤銷一個沒有撤銷權限的進程或撤銷一個不存在的進程,就會得到一個錯誤信息。
可以向多個進程發(fā)信號或終止它們。
當 kill 成功的發(fā)送了信號后,shell 會在屏幕上顯示出進程的終止信息。有時這個信息不會馬上顯示,只有當按下 Enter 鍵使 shell 的命令提示符再次出現(xiàn)時,才會顯示出來。
kill 信號 (9),因為進程不能首先捕獲它要撤銷所有的后臺作業(yè),可以輸入 kill 0。因為有些在后臺運行的命令會啟動多個進程,跟蹤并找到所有要殺掉的進程的 PID 是件很麻煩的事。這時,使用 kill 0 來終止所有當前 shell 啟動的進程,是個有效的方法。案例
案例 1:
```#kill -l // 列出所有的信號名稱
在輸出中,只有第 9 種信號 (SIGKILL) 才可以無條件終止進程,其他信號進程都有權利忽略。以下是常用的信號:
信號名稱
編號
說明
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ù)值 (不區(qū)分大小寫)
```\#kill -l term
15
\#kill -l kill
9
\#kill -l SIGKILL
案例 3:配合 ps 命令,使用 kill 殺掉進程
```#ps -ef | grep vim // 得到關于 vim 進程的 PID,比如得到的 PID 是 111
#kill 111 // 刪除 vim 進程
案例 4:徹底殺死進程
`\#kill -9 111`
案例 5:殺死指定用戶的所有進程
```\#kill -9 $(ps -ef| grep username) // 方法 1
\#kill -u username // 方法 2```
案例 6:init 進程 (PID 為 1) 是不可殺的
`\#kill -9 1`
這是因為 `init` 是 linux 系統(tǒng)中不可缺少的程序之一 。所謂的 `init` 進程,他是一個有內(nèi)核啟動的用戶級進程。內(nèi)核自行啟動 (已經(jīng)被載入內(nèi)存,開始運行,并已初始化所有的設備驅動程序和數(shù)據(jù)結構等) 之后,就通過啟動一個用戶級程序 `init` 的方式,完成引導進程。所以,`init` 時鐘是第一個進程 (其進程編號始終為 1)。其他所有進程都是 `init` 進程的子孫。`init` 進程是不可殺死的。不夠貌似 `init` 進程的作用正在被逐漸弱化。