linux命令(8)kill命令
kill命令:
Linux中的kill命令用來(lái)終止指定的進(jìn)程(terminate?a?process)的運(yùn)行,是Linux下進(jìn)程管理的常用命令。通常,終止一個(gè)前臺(tái)進(jìn)程可以使用Ctrl+C鍵,但是,對(duì)于一個(gè)后臺(tái)進(jìn)程就須用kill命令來(lái)終止,我們就需要先使用ps/pidof/pstree/top等工具獲取進(jìn)程PID,然后使用kill命令來(lái)殺掉該進(jìn)程。kill命令是通過(guò)向進(jìn)程發(fā)送指定的信號(hào)來(lái)結(jié)束相應(yīng)進(jìn)程的。在默認(rèn)情況下,采用編號(hào)為15的TERM信號(hào)。TERM信號(hào)將終止所有不能捕獲該信號(hào)的進(jìn)程。對(duì)于那些可以捕獲該信號(hào)的進(jìn)程就要用編號(hào)為9的kill信號(hào),強(qiáng)行“殺掉”該進(jìn)程。?
1.命令格式:
- kill[參數(shù)][進(jìn)程號(hào)]
2.命令功能:
發(fā)送指定的信號(hào)到相應(yīng)進(jìn)程。不指定型號(hào)將發(fā)送SIGTERM(15)終止指定進(jìn)程。如果任無(wú)法終止該程序可用“-KILL”?參數(shù),其發(fā)送的信號(hào)為SIGKILL(9)?,將強(qiáng)制結(jié)束進(jìn)程,使用ps命令或者jobs?命令可以查看進(jìn)程號(hào)。root用戶將影響用戶的進(jìn)程,非root用戶只能影響自己的進(jìn)程。
3.命令參數(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??指定用戶?
注意:
1、kill命令可以帶信號(hào)號(hào)碼選項(xiàng),也可以不帶。如果沒(méi)有信號(hào)號(hào)碼,kill命令就會(huì)發(fā)出終止信號(hào)(15),這個(gè)信號(hào)可以被進(jìn)程捕獲,使得進(jìn)程在退出之前可以清理并釋放資源。也可以用kill向進(jìn)程發(fā)送特定的信號(hào)。例如:
- kill?-2?123
- 它的效果等同于在前臺(tái)運(yùn)行PID為123的進(jìn)程時(shí)按下Ctrl+C鍵。但是,普通用戶只能使用不帶signal參數(shù)的kill命令或最多使用-9信號(hào)。
2、kill可以帶有進(jìn)程ID號(hào)作為參數(shù)。當(dāng)用kill向這些進(jìn)程發(fā)送信號(hào)時(shí),必須是這些進(jìn)程的主人。如果試圖撤銷一個(gè)沒(méi)有權(quán)限撤銷的進(jìn)程或撤銷一個(gè)不存在的進(jìn)程,就會(huì)得到一個(gè)錯(cuò)誤信息。
3、可以向多個(gè)進(jìn)程發(fā)信號(hào)或終止它們。
4、當(dāng)kill成功地發(fā)送了信號(hào)后,shell會(huì)在屏幕上顯示出進(jìn)程的終止信息。有時(shí)這個(gè)信息不會(huì)馬上顯示,只有當(dāng)按下Enter鍵使shell的命令提示符再次出現(xiàn)時(shí),才會(huì)顯示出來(lái)。
5、應(yīng)注意,信號(hào)使進(jìn)程強(qiáng)行終止,這常會(huì)帶來(lái)一些副作用,如數(shù)據(jù)丟失或者終端無(wú)法恢復(fù)到正常狀態(tài)。發(fā)送信號(hào)時(shí)必須小心,只有在萬(wàn)不得已時(shí),才用kill信號(hào)(9),因?yàn)檫M(jìn)程不能首先捕獲它。要撤銷所有的后臺(tái)作業(yè),可以輸入kill?0。因?yàn)橛行┰诤笈_(tái)運(yùn)行的命令會(huì)啟動(dòng)多個(gè)進(jìn)程,跟蹤并找到所有要?dú)⒌舻倪M(jìn)程的PID是件很麻煩的事。這時(shí),使用kill?0來(lái)終止所有由當(dāng)前shell啟動(dòng)的進(jìn)程,是個(gè)有效的方法。
4.使用實(shí)例:
實(shí)例1:列出所有信號(hào)名稱
命令:
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
說(shuō)明:
- 只有第9種信號(hào)(SIGKILL)才可以無(wú)條件終止進(jìn)程,其他信號(hào)進(jìn)程都有權(quán)利忽略。 下面是常用的信號(hào):
- HUP????1????終端斷線
- INT?????2????中斷(同?Ctrl?+?C)
- QUIT????3????退出(同?Ctrl?+?\)
- TERM???15????終止
- KILL????9????強(qiáng)制終止
- CONT???18????繼續(xù)(與STOP相反,?fg/bg命令)
- STOP????19????暫停(同?Ctrl?+?Z)
實(shí)例2:得到指定信號(hào)的數(shù)值
命令:
輸出:
- [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]#
說(shuō)明:
實(shí)例3:先用ps查找進(jìn)程,然后用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)?-?沒(méi)有那個(gè)進(jìn)程
- [root@localhost?test6]#
說(shuō)明:
實(shí)例4:徹底殺死進(jìn)程
命令:
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)?-?沒(méi)有那個(gè)進(jìn)程
- [root@localhost?test6]#
說(shuō)明:
實(shí)例5:殺死指定用戶所有進(jìn)程
命令:
- kill?-9?$(ps?-ef?|?grep?peidalinux)
- kill?-u?peidalinux
輸出:
- [root@localhost?~]#?kill?-9?$(ps?-ef?|?grep?peidalinux)?
- [root@localhost?~]#?kill?-u?peidalinux
說(shuō)明:
方法一,過(guò)濾出hnlinux用戶進(jìn)程并殺死
實(shí)例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@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?~]#
說(shuō)明:
init是Linux系統(tǒng)操作中不可缺少的程序之一。所謂的init進(jìn)程,它是一個(gè)由內(nèi)核啟動(dòng)的用戶級(jí)進(jìn)程。內(nèi)核自行啟動(dòng)(已經(jīng)被載入內(nèi)存,開(kāi)始運(yùn)行,并已初始化所有的設(shè)備驅(qū)動(dòng)程序和數(shù)據(jù)結(jié)構(gòu)等)之后,就通過(guò)啟動(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é)
以上是生活随笔為你收集整理的linux命令(8)kill命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: burp suite 二级域名扫描插件
- 下一篇: Docker 容器中“TERM envi