1. 程式人生 > 其它 >Linux之21——kill 命令

Linux之21——kill 命令

kill 命令的用途

kill 命令很容易讓人產生誤解,以為它僅僅就是用來殺死程序的。我們來看一下 man page 對它的解釋:kill - send a signal to a process.

從官方的解釋不難看出,kill 是向程序傳送訊號的命令。當然我們可以向程序傳送一個終止執行的訊號,此時的 kill 命令才是名至實歸。事實上如果我們不給 kill 命令傳遞訊號引數,它預設傳遞終止程序執行的訊號給程序!這是 kill 命令最主要的用法,也是本文要介紹的內容。

一般情況下,終止一個前臺程序使用 Ctrl + C 就可以了。對於一個後臺程序就須用 kill 命令來終止。我們會先使用 ps、top 等命令獲得程序的 PID,然後使用 kill 命令來殺掉該程序。

kill 命令格式

kill [options] <pid> [...]

<pid> […] : 把訊號傳送給列出的所有程序。

options :

-<signal> : 指定傳送給程序的訊號,指定訊號的名稱或號碼都可以。

</span>-l : 列出所有訊號的名稱和號碼。</pre>

kill 命令詳情

檢視可用訊號

既然 kill 命令是用來向程序傳送訊號的,那就讓我們先來看看都有哪些訊號可以傳送給程序。

$ kill -l

可不少啊!但這些訊號中只有第 9 種訊號(SIGKILL)才可以無條件的終止程序,其他訊號程序都有權利忽略。並且這麼多的訊號中常用的也不多,下面我們解釋幾個常用訊號的含義。

代號
名稱 內容
1
SIGHUP 啟動被終止的程式,可讓該程序重新讀取自己的配置檔案,類似重新啟動。
2 SIGINT 相當於用鍵盤輸入 [ctrl]-c 來中斷一個程式的進行。
9 SIGKILL 代表強制中斷一個程式的進行,如果該程式進行到一半,那麼尚未完成的部分可能會有“半產品”產生,類似 vim會有 .filename.swp 保留下來。
15 SIGTERM 以正常的方式來終止該程式。由於是正常的終止,所以後續的動作會將他完成。不過,如果該程式已經發生問題,就是無法使用正常的方法終止時,輸入這個 signal 也是沒有用的。
19 SIGSTOP 相當於用鍵盤輸入 [ctrl]-z 來暫停一個程式的進行。

上表僅是常見的訊號,更多的訊號資訊請自行通過 man 7 signal 瞭解。一般來說,只要記住 "1, 9, 15" 這三個訊號的意義就可以了。

常用命令

$ kill -15 pid

這條命令發訊號讓程序正常退出。所謂的正常退出是指按應用程式自己的退出流程完成退出,這樣就可以清理並釋放資源。比如 vim 程式,如果是正常的退出,就會刪除掉臨時檔案 *.swp。
既然訊號 15 是退出程序的正確方式,那它也應該是最常用的方式,因而我們可以省略引數 -15。

$ kill pid

這條命令和上面的命令是等價的,kill 命令預設傳送訊號 15 給目標程序。

當程序出現了異常狀況,不能通過訊號15正常退出時,我們就需要通過非常的手段直接終結掉程序。所謂的非常手段就是傳遞訊號 9 給目標程序!

$ kill -9 pid

這樣結束掉的程序不會進行資源的清理工作,所以如果你用它來終結掉 vim 的程序,就會發現臨時檔案 *.swp 沒有被刪除。

總結

使用訊號 15 是安全的,而訊號 9 則是處理異常程序的最後手段,請勿濫用。