文法格式
kill [-s 訊號][程式] 或 kill [-l 訊號]
使用說明
kill 命令發送一個訊號(預設,SIGTERM 訊號)到一個正啟動並執行程式。預設操作一般是停止進程。如果想停止一個進程,在 ProcessID 變數中指定進程標識符(PID)。這個 shell 報告每個在後台
啟動並執行進程的 PID(除非在一個管道上啟動多個進程,這個種情況下,shell 報告最後一個進程號)。
還可用 ps 命令來發現命令的進程標識號。root 使用者可用 kill 命令來停止任何進程。如果不是
root 使用者,必須已經啟動了要停止的進程。SignalName 以大小寫無關的方式被辨認,
無 SIG 首碼。如果指定的 SignalNumber 是 0,kill 命令檢查指定 PID 的有效性。
主要參數
-s{SignalName | SignalNumber} 將訊號指定為訊號數或訊號名,例如為 SIGKILL 訊號指定 -9 或KILL。
-SignalName 指定一個訊號名,如 SIGHUP。
-SignalNumber 指定一個訊號數。
註: 在文法中要用預設的訊號指定負 PID,必須指定作為一個訊號。否則,第一個運算元被解釋為一個 SignalNumber。 ProcessID 指定一個十進位整數代表一個要被發送訊號的進程或進程組。如果
PID 是一個正值,kill 命令發送進程 ID 與 PID 相等的進程。如果 PID 值是 0,kill 命令發
送訊號到所有進程組的 ID 等於寄件者進程組的 ID 的進程。不發送訊號到 PID 為 0 或 1 的進程。
如果 PID 是 -1,kill命令發送訊號到所有由寄件者的有效使用者所有的進程。不發送訊號到 PID 為 0
或 1 的進程。 如果訊號為非 -1 的負數,kill 命令發送訊號到進程組標識等於 PID 絕對值的所有進程。
-l 列出由實現支援的訊號名稱。-lExitStatus 列出去掉了公用 SIG 首碼的訊號名。如果 ExitStatus
是一個十進位整數值,對應那個訊號的訊號名<br />被顯示。如果 ExitStatus 是一個對應於由這個訊號
終止的進程的退出狀態值,則顯示對應於這個終止這個進程的訊號的名稱。
應用執行個體
kill 1095這個通過發送預設的 SIGTERM 訊號到進程 1095 來停止它。
註:如果進程 1095 已經做了特殊安排來忽略或覆蓋 SIGTERM 訊號,這個進程實際可能不停止。
kill -kill 2098 1569這個發送訊號 9,即 SIGKILL 訊號,來處理 2098 和 1569。SIGKILL 訊號是
個通常不能被忽略或覆蓋的特殊訊號。
kill -kill 0這個發送訊號 9,即 SIGKILL 訊號,到所有組 ID 等於寄件者組 ID 的進程。
因為 shell 不能忽略 SIGKILL 訊號,它也停止登入 shell 並登出使用者。
kill -9 -1這發送訊號 9,就是 SIGKILL 訊號,到所有由有效使用者擁有的進程,甚至那些在其他工作站上
啟動的和屬於其他進程組的進程。如果一個您請求的列表正被列印,它也被停止。
kill -USR1 1103kill 命令的名稱是一個誤導,因為許多訊號,包括 SIGUSR1,並不停止進程。
發生在 SIGUSR1 訊號上的操作由正啟動並執行特定的應用程式定義。註:要發送訊號 15,或用這種
形式的 kill 命令發送 SIGTERM 訊號,必須明確地指定 -15 或 TERM。
進程不能kill掉的情況
做過Linux開發的人通常遇到過一個進程不能kill掉的情況,即使使用的是kill -9方式,而一般的教課書都只說kill -9能殺死任何進程,
遇到這種情況時就會感覺到很矛盾,其它這也是正常的,通常有兩種情況是不能kill掉的:
一是進程已經成為僵死進程,當它的父進程將它回收或將它的父進程kill掉即可在ps輸出看不到了;
二是進程正處在核心狀態中,Linux進程運行時分核心和使用者兩種狀態,當進程進入核心狀態後,會屏蔽所有訊號,包括SIGKIL,
所以這個時候kill -9也變得無效了。