簡介:
無論你使用哪種作業系統,你一定會遇到某個行為失常的應用,它把自己鎖死並拒絕關閉。在Linux(還有Mac),你可以用一個"kill"命令強制終結它。在這個教程中,我們將展示給你多種方式使用"kill"命令終結應用。
kill命令
1,kill命令和訊號:
當你執行一個"kill"命令,你實際上發送了一個訊號給系統,讓它去終結不正常的應用。總共有60個你可以使用的訊號,但是基本上你只需要知道SIGTERM(15)和SIGKILL(9)。
kill命令的工作原理是,向Linux系統的核心發送一個系統操作訊號和某個程式的進程標識號,然後系統核心就可以對進程標識號指定的進程進行操作。比如在top命令中,我們看到系統運行許多進程,有時就需要使用kill中止某些進程來提高系統資源。kill是大多數Shell內部命令可以直接調用的。
2,你可以用這個命令看到所有訊號的列表,即列出所有訊號名稱:
$ kill -l
SIGTERM:此訊號請求一個進程停止運行。此訊號是可以被忽略的。進程可以用一段時間來正常關閉,一個程式的正常關閉一般需要一段時間來儲存進度並釋放資源。換句話說,它不是強制停止。
SIGKILL:此訊號強制進程立刻停止運行。程式不能忽略此訊號,而未儲存的進度將會丟失。
3,使用"kill"的文法是:
kill [訊號或選項] PID(s)
預設訊號(當沒有指定的時候)是SIGTERM。當它不起作用時,你可以使用下面的命令來強制kill掉一個進程:
kill SIGKILL PID
或者
kill -9 PID
這裡"-9"代表著SIGKILL訊號。
例如,要kill掉Chrome,我會運行命令:
kill -9 3629,通過$ ps -aux可以得到pid
也可以在同一時間kill多個進程。
kill -9 PID1 PID2 PID3
得到指定訊號的數值
[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
4,init進程是不可殺的
命令:kill -9 1
init是Linux系統操作中不可缺少的程式之一。所謂的init進程,它是一個由核心啟動的使用者級進程。核心自行啟動(已經被載入記憶體,開始運行,並已初始化所有的裝置驅動程式和資料結構等)之後,就通過啟動一個使用者級程式init的方式,完成引導進程。所以,init始終是第一個進程(其進程編號始終為1)。 其它所有進程都是init進程的子孫。init進程是不可殺的。
killall命令: killall同樣使用進程名替代PID,並且它會kill掉所有的同名進程。例如,如果你正在運行多個Firefox瀏覽器的執行個體,可以用命令把它們全部kill掉:
killall chrome
xkill命令:
xkill 是圖形方式kill一個應用。當你在終端鍵入"xkill",你的游標將立刻變成一個"十字"。你只需要做的是在不正常的應用上點擊一下,它就會立刻kill掉這個應用。
注意:
$ kill -9 PID, 這個強大和危險的命令迫使進程在運行時突然終止,進程在結束後不能自我清理。危害是導致系統資源無法正常釋放,一般不推薦使用,除非其他辦法都無效。
當使用此命令時,一定要通過ps -ef確認沒有剩下任何殭屍進程。只能通過終止父進程來消除殭屍進程。如果殭屍進程被init收養,問題就比較嚴重了。殺死init進程意味著關閉系統。
如果系統中有殭屍進程,並且其父進程是init,而且殭屍進程佔用了大量的系統資源,那麼就需要在某個時候重啟機器以清除進程表了。
標準的kill命令通常都能達到目的。終止有問題的進程,並把進程的資源釋放給系統。然而,如果進程啟動了子進程,只殺死父進程,子進程仍在運行,因此仍消耗資源。為了防止這些所謂的“殭屍進程”,應確保在殺死父進程之前,先殺死其所有的子進程。