【Linux】kill、killall、pkill、kill -9的區別


目錄

區別

killall和kill

pkill 和kill

pkill 和killall

kill 和kill -9

相關參數

killall命令

kill 命令

pkill命令


區別

進程ID唯一,所以kill一次只能殺死1個進程,其他相同名稱的進程仍然存在,而pkill和killall,則可以一次殺死所有擁有相同名稱的進程. 

killall和kill

killall命令用於殺死指定名字的進程

kill  命令用於殺死指定進程ID的進程

killall相當於 查詢進程ID+ kill 進程ID 兩步合一

killall =  1)ps -aux|grep name 得出pid  2)kill pid

pkill 和kill

pkill和kill用法相同,不同的地方在於kill指定的進程ID,pkill指定的是進程名

pkill -signal process_name, signal和kill一樣也是默認15,強制的話也是指定9

kill -9 process_id 等同 pkill -9 process_name 

(kill -9 `pidof process_name` 等同 pkill -9 process_name )

pkill 和killall

killall和pkill的用法幾乎相同,但pkill可以指定非完整名稱,而killall則必須指定完整進程名稱

kill 和kill -9

kill -9 就是kill指定了信號9

kill 不指定信號,則默認是發送15 

即:kill = kill -15

kill -15,15信號通知進程退出,進程在退出之前可以清理並釋放資源。9信號直接殺死進程,只有在萬不得已時,才用kill信號(9), kill -2 = CTRL+C

相關參數

killall命令

killall[參數][進程名]

-Z 只殺死擁有scontext 的進程
-e 要求匹配進程名稱
-I 忽略小寫
-g 殺死進程組而不是進程
-i 交互模式,殺死進程前先詢問用戶
-l 列出所有的已知信號名稱
-q 不輸出警告信息
-s 發送指定的信號
-v 報告信號是否成功發送
-w 等待進程死亡
--help 顯示幫助信息
--version 顯示版本顯示

例如:

1:殺死所有同名進程
    killall nginx
    killall -9 bash

2.向進程發送指定信號
    killall -TERM ngixn  或者  killall -KILL nginx

kill 命令

 kill[參數][進程id]

命令參數

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

https://blog.csdn.net/kunkliu/article/details/86538509

范例

復制代碼

實例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

說明:
只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略。    下面是常用的信號:
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 


實例4:徹底殺死進程
命令:kill –9 3268   // -9 強制殺掉進程

ps: init是Linux系統操作中不可缺少的程序之一。所謂的init進程,它是一個由內核啟動的用戶級進程。內核自行啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之后,就通過啟動一個用戶級程序init的方式,完成引導進程。所以,init  始終是第一個進程(其進程編號始終為1)。 其它所有進程都是init進程的子孫。init進程是不可殺的!

pkill命令

  pkill 和killall 應用方法差不多,pkill可以指定非完整名稱,而killall則必須指定完整進程名稱。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM