每天乙個linux命令(42) kill命令

2021-08-14 20:41:19 字數 4932 閱讀 7138

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

1.命令格式:

kill[引數][程序號]

2.命令功能:

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

3.命令引數:

-l  訊號,若果不加訊號的編號引數,則使用「-l」引數會列出全部的訊號名稱

-a  當處理當前程序時,不限制命令名和程序號的對應關係

-p  指定kill 命令只列印相關程序的程序號,而不傳送任何訊號

-s  指定傳送訊號

-u  指定使用者 

注意:1、kill命令可以帶訊號號碼選項,也可以不帶。如果沒有訊號號碼,kill命令就會發出終止訊號(15),這個訊號可以被程序捕獲,使得程序在退出之前可以清理並釋放資源。也可以用kill向程序傳送特定的訊號。例如:

kill -2 123

它的效果等同於在前台執行pid為123的程序時按下ctrl+c鍵。但是,普通使用者只能使用不帶signal引數的kill命令或最多使用-9訊號。

2、kill可以帶有程序id號作為引數。當用kill向這些程序傳送訊號時,必須是這些程序的主人。如果試圖撤銷乙個沒有許可權撤銷的程序或撤銷乙個不存在的程序,就會得到乙個錯誤資訊。

3、可以向多個程序發訊號或終止它們。

4、當kill成功地傳送了訊號後,shell會在螢幕上顯示出程序的終止資訊。有時這個資訊不會馬上顯示,只有當按下enter鍵使shell的命令提示符再次出現時,才會顯示出來。

5、應注意,訊號使程序強行終止,這常會帶來一些***,如資料丟失或者終端無法恢復到正常狀態。傳送訊號時必須小心,只有在萬不得已時,才用kill訊號(9),因為程序不能首先捕獲它。要撤銷所有的後台作業,可以輸入kill 0。因為有些在後台執行的命令會啟動多個程序,跟蹤並找到所有要殺掉的程序的pid是件很麻煩的事。這時,使用kill 0來終止所有由當前shell啟動的程序,是個有效的方法。

4.使用例項:

例項1:列出所有訊號名稱

命令:kill -l

輸出:[root@localhost test6]# kill -l

1) sighup       2) sigint       3) sigquit      4) sigill

5) sigtrap      6) sigabrt      7) sigbus       8) sigfpe

9) sigkill     10) sigusr1     11) sigsegv     12) sigusr2

13) sigpipe     14) sigalrm     15) sigterm     16) sigstkflt

17) sigchld     18) sigcont     19) sigstop     20) sigtstp

21) sigttin     22) sigttou     23) sigurg      24) sigxcpu

25) sigxfsz     26) sigvtalrm   27) sigprof     28) sigwinch

29) sigio       30) sigpwr      31) sigsys      34) sigrtmin

35) sigrtmin+1  36) sigrtmin+2  37) sigrtmin+3  38) sigrtmin+4

39) sigrtmin+5  40) sigrtmin+6  41) sigrtmin+7  42) sigrtmin+8

43) sigrtmin+9  44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12

47) sigrtmin+13 48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14

51) sigrtmax-13 52) sigrtmax-12 53) sigrtmax-11 54) sigrtmax-10

55) sigrtmax-9  56) sigrtmax-8  57) sigrtmax-7  58) sigrtmax-6

59) sigrtmax-5  60) sigrtmax-4  61) sigrtmax-3  62) sigrtmax-2

63) sigrtmax-1  64) sigrtmax

說明:hup    1    終端斷線

int     2    中斷(同 ctrl + c)

quit    3    退出(同 ctrl + \)

term   15    終止

kill    9    強制終止

cont   18    繼續(與stop相反, fg/bg命令)

stop    19    暫停(同 ctrl + z)

例項2:得到指定訊號的數值

命令:輸出:

[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[root@localhost test6]#

說明:例項3:先用ps查詢程序,然後用kill殺掉

命令:kill 3268

輸出:[root@localhost test6]# ps -ef|grep vim 

root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log

root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

[root@localhost test6]# kill 3268 

[root@localhost test6]# kill 3268 

-bash: kill: (3268) - 沒有那個程序

[root@localhost test6]#

說明:例項4:徹底殺死程序

命令:kill –9 3268 

輸出:[root@localhost test6]# ps -ef|grep vim 

root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log

root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

[root@localhost test6]# kill –9 3268 

[root@localhost test6]# kill 3268 

-bash: kill: (3268) - 沒有那個程序

[root@localhost test6]#

說明:例項5:殺死指定使用者所有程序

命令:kill -9 

(ps -ef | grep peidalinux)

kill -u peidalinux

輸出:[root@localhost ~]

# kill -9 

(ps -ef | grep peidalinux) 

[root@localhost ~]# kill -u peidalinux

說明:方法一,過濾出hnlinux使用者程序並殺死

例項6:init程序是不可殺的

命令:kill -9 1

輸出:[root@localhost ~]# ps -ef|grep init

root         1     0  0 nov02 ?        00:00:00 init [3]                  

root     17563 17534  0 17:37 pts/1    00:00:00 grep init

[root@localhost ~]# kill -9 1

[root@localhost ~]# kill -hup 1

[root@localhost ~]# ps -ef|grep init

root         1     0  0 nov02 ?        00:00:00 init [3]                  

root     17565 17534  0 17:38 pts/1    00:00:00 grep init

[root@localhost ~]# kill -kill 1

[root@localhost ~]# ps -ef|grep init

root         1     0  0 nov02 ?        00:00:00 init [3]                  

root     17567 17534  0 17:38 pts/1    00:00:00 grep init

[root@localhost ~]#

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

**:

每天乙個Linux命令

將我遇到的linux指令總結一下,不斷增加 1 sz和rz 一般來說,linux 伺服器大多是通過 ssh客戶端來進行遠端的登陸和管理的,使用 ssh登陸 linux ssh有關的兩個命令可以提供很方便的操作 sz 將選定的檔案傳送 send 到本地機器 rz 執行該命令會彈出乙個檔案選擇視窗,從本...

每天乙個linux命令

linux cmp命令 linux cmp命令用於比較兩個檔案是否有差異。當相互比較的兩個檔案完全一樣時,則該指令不會顯示任何資訊。若發現有所差異,缺省會標示出第乙個不同之處的字元和列數編號。若不指定任何檔名稱或是所給予的檔名為 則cmp指令會從標準輸入裝置讀取資料。語法cmp clsv i 字元數...

每天乙個 Linux 命令

head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾。1 命令格式 head 引數 檔案 2 命令功能 head 用來顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的...