linux命令(8)kill命令
kill命令:
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
說明:
- 只有第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?
- [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命令(8)kill命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: burp suite 二级域名扫描插件
- 下一篇: Linux x64 下 Matlab R