【命令】kill命令
kill命令詳解:
<---用于向進(jìn)程發(fā)送信號(hào),以實(shí)現(xiàn)對(duì)進(jìn)程的管理--->
語法格式:kill [-s signal|-SIGNAL] pid...
kill -l [signal]
其語法格式最終為:kill [參數(shù)] 進(jìn)程號(hào)
1、命令功能:
發(fā)送指定的信號(hào)到相應(yīng)進(jìn)程。不指定型號(hào)將發(fā)送SIGTERM(15)終止指定進(jìn)程。如果無法終止該程序可用“-KILL”參數(shù),其發(fā)送的信號(hào)為SIGKILL(9),將強(qiáng)制結(jié)束進(jìn)程
使用ps命令或者jobs命令可以查看進(jìn)程號(hào)。root用戶將影響用戶的所有進(jìn)程,非root用戶只能影響自己的進(jìn)程
2、命令參數(shù):
-l信號(hào),若果不加信號(hào)的編號(hào)參數(shù),則使用“-l”參數(shù)會(huì)列出全部的信號(hào)名稱
-a當(dāng)處理當(dāng)前進(jìn)程時(shí),不限制命令名和進(jìn)程號(hào)的對(duì)應(yīng)關(guān)系
-p指定kill命令只打印相關(guān)進(jìn)程的進(jìn)程號(hào),而不發(fā)送任何信號(hào)
-s指定發(fā)送信號(hào)
-u指定用戶
3、注意事項(xiàng):
·kill命令可以帶信號(hào)號(hào)碼選項(xiàng),也可以不帶。如果沒有信號(hào)號(hào)碼,kill命令就會(huì)發(fā)出終止信號(hào)(15),這個(gè)信號(hào)可以被進(jìn)程捕獲,使得進(jìn)程在退出之前可以清理并釋放資源。也可以用kill向進(jìn)程發(fā)送特定的信號(hào)。例如:
kill-2123,它的效果等同于在前臺(tái)運(yùn)行PID為123的進(jìn)程時(shí)按下Ctrl+C鍵。但是,普通用戶只能使用不帶signal參數(shù)的kill命令或最多使用-9信號(hào)。
·kill可以帶有進(jìn)程ID號(hào)作為參數(shù)。當(dāng)用kill向這些進(jìn)程發(fā)送信號(hào)時(shí),必須是這些進(jìn)程的主人。如果試圖撤銷一個(gè)沒有權(quán)限撤銷的進(jìn)程或撤銷一個(gè)不存在的進(jìn)程,就會(huì)得到一個(gè)錯(cuò)誤信息。
·可以向多個(gè)進(jìn)程發(fā)信號(hào)或終止它們。
·當(dāng)kill成功地發(fā)送了信號(hào)后,shell會(huì)在屏幕上顯示出進(jìn)程的終止信息。有時(shí)這個(gè)信息不會(huì)馬上顯示,只有當(dāng)按下Enter鍵使shell的命令提示符再次出現(xiàn)時(shí),才會(huì)顯示出來。
·應(yīng)注意,信號(hào)使進(jìn)程強(qiáng)行終止,這常會(huì)帶來一些副作用,如數(shù)據(jù)丟失或者終端無法恢復(fù)到正常狀態(tài)。發(fā)送信號(hào)時(shí)必須小心,只有在萬不得已時(shí),才用kill信號(hào)(9),因?yàn)檫M(jìn)程不能首先捕獲它。要撤銷所有的后臺(tái)作業(yè),可以輸入kill0。因?yàn)橛行┰诤笈_(tái)運(yùn)行的命令會(huì)啟動(dòng) 多個(gè)進(jìn)程,跟蹤并找到所有要?dú)⒌舻倪M(jìn)程的PID是件很麻煩的事。這時(shí),使用kill0來終止所有由當(dāng)前shell啟動(dòng)的進(jìn)程,是個(gè)有效的方法。
4、每個(gè)信號(hào)的標(biāo)識(shí)方式:
1) 信號(hào)的數(shù)字標(biāo)識(shí);
2) 信號(hào)的完整名稱;
3) 信號(hào)的簡(jiǎn)寫名稱;
5、使用示例:
示例1:列出所有信號(hào)名稱:
1 [root@test1 ~]# kill -l 2 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 3 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 4 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 5 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 6 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 7 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 8 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 9 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 10 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 11 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 13 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 14 63) SIGRTMAX-1 64) SIGRTMAX 15 [root@test1 ~]#
說明:只有第9種信號(hào)(SIGKILL)才可以無條件終止進(jìn)程,其他信號(hào)進(jìn)程都有權(quán)利忽略。 下面是常用的信號(hào):
HUP1終端斷線(無須關(guān)閉進(jìn)程而讓其重讀配置文件)
INT2 終止正在運(yùn)行的進(jìn)程(Ctrl+C)
QUIT3退出(同Ctrl+)
TERM15終止運(yùn)行中的程序,這是友好終止
KILL9殺死運(yùn)行中的進(jìn)程,這是強(qiáng)制終止
CONT18繼續(xù)(與STOP相反,fg/bg命令)
STOP19暫停(同Ctrl+Z)
示例2:實(shí)例2:得到指定信號(hào)的數(shù)值
[root@test1 ~]# kill -l HUP 1 [root@test1 ~]# kill -l INT 2 [root@test1 ~]#
示例3:先用ps查找進(jìn)程,然后kill殺掉
# ps -ef|grep vim
# kill PID
[root@test1 ~]# 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@test1 ~]# kill 3268
[root@test1 ~]# kill 3268
-bash: kill: (3268) - 沒有那個(gè)進(jìn)程
[root@test1 ~]#
示例4:徹底殺死進(jìn)程
【方法一:直接發(fā)送信號(hào)9徹底殺死】
# ps -ef|grep vim
# kill -9 PID
[root@test1 ~]# 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@test1 ~]# kill -9 3268 [root@test1 ~]# kill 3268 -bash: kill: (3268) - 沒有那個(gè)進(jìn)程 [root@test1 ~]#
【方法二:直接殺死該進(jìn)程的父進(jìn)程】
示例5:徹底殺死指定用戶的所有進(jìn)程
# kill -9 $(ps -ef | grep username)
示例6:init進(jìn)程是不殺的
# 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@test1 ~]# kill -9 1 [root@ltest1 ~]# kill -HUP 1 [root@test1 ~]# 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@test1 ~]# kill -KILL 1 [root@test1 ~]# 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@test1 ~]#
說名:init是Linux系統(tǒng)操作中不可缺少的程序之一。所謂的init進(jìn)程,它是一個(gè)由內(nèi)核啟動(dòng)的用戶級(jí)進(jìn)程。內(nèi)核自行啟動(dòng)(已經(jīng)被載入內(nèi)存,開始運(yùn)行,并已初始化所有的設(shè)備驅(qū)動(dòng)程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過啟動(dòng)一個(gè)用戶級(jí)程序init的方式,完成引導(dǎo)進(jìn)程。所以,init始終是第一個(gè)進(jìn)程(其進(jìn)程編號(hào)始終為1)。其它所有進(jìn)程都是init進(jìn)程的子孫。init進(jìn)程是不可殺的!
總結(jié)
以上是生活随笔為你收集整理的【命令】kill命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 凭证类型
- 下一篇: GUPPY 3.1.5 安装