Linux之kill命令

【Linux常用命令速查手冊】關注【入門小站】,後臺回覆 「1001」 自取。

Linux中的kill命令用來終止指定的程序(terminate a process)的執行,是Linux下程序管理的常用命令。通常,終止一個前臺程序可以使用Ctrl+C鍵,但是,對於一個後臺程序就須用kill命令來終止,我們就需要先使用ps/pidof/pstree/top等工具獲取程序PID,然後使用kill命令來殺掉該程序。kill命令是透過向程序傳送指定的訊號來結束相應程序的。在預設情況下,採用編號為15的TERM訊號。TERM訊號將終止所有不能捕獲該訊號的程序。對於那些可以捕獲該訊號的程序就要用編號為9的kill訊號,強行“殺掉”該程序。

命令格式

kill[引數][程序號

命令功能

傳送指定的訊號到相應程序。不指定型號將傳送SIGTERM(15)終止指定程序。如果任無法終止該程式可用“-KILL” 引數,其傳送的訊號為SIGKILL(9) ,將強制結束程序,使用ps命令或者jobs 命令可以檢視程序號。root使用者將影響使用者的程序,非root使用者只能影響自己的程序。

命令引數

-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啟動的程序,是個有效的方法。

列出所有訊號名稱

> kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+338) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX

只有第9種訊號(SIGKILL)才可以無條件終止程序,其他訊號程序都有權利忽略。 下面是常用的訊號:

HUP 1 終端斷線

INT 2 中斷(同 Ctrl + C)

QUIT 3 退出(同 Ctrl + \)

TERM 15 終止

KILL 9 強制終止

CONT 18 繼續(與STOP相反, fg/bg命令)

STOP 19 暫停(同 Ctrl + Z)

得到指定訊號的數值

> kill -l KILL9

先用ps查詢程序,然後用kill殺掉

> ps -ef | grep javaroot 16934 1 0 Feb25 ? 00:18:13 java -jar demo。jar//徹底殺死該程序> kill -9 16934

強制殺死所有和java相關的所有程序

> kill -9 $(ps -ef | grep java)

強制殺死deploy使用者起的程序

> kill -u deploy

init程序是不可殺的

> kill -9 1

init是Linux系統操作中不可缺少的程式之一。所謂的init程序,它是一個由核心啟動的使用者級程序。核心自行啟動(已經被載入記憶體,開始執行,並已初始化所有的裝置驅動程式和資料結構等)之後,就透過啟動一個使用者級程式init的方式,完成引導程序。所以,init始終是第一個程序(其程序編號始終為1)。 其它所有程序都是init程序的子孫。init程序是不可殺的!

原文連結:https://rumenz。com/rumenbiji/linux-kill。html

微信公眾號:入門小站

【Linux常用命令速查手冊】關注【入門小站】,後臺回覆 「1001」 自取。