Linux 的命令行提供很多命令來殺死進(jìn)程。比如,你可以向 kill
命傳遞一個PID來殺死進(jìn)程;pkill
命令使用一個正則表達(dá)式作為輸入,所以和該模式匹配的進(jìn)程都被殺死。
但是還有一個命令叫 killall
,默認(rèn)情況下,它精確地匹配參數(shù)名,然后殺死匹配進(jìn)程。在這篇文章中,我們將討論有關(guān)這個命令的實際應(yīng)用。
默認(rèn)情況下,killall 命令將向一個/組進(jìn)程發(fā)送一個 SIGTERM
信號,但是,也可以通過參數(shù)發(fā)送一個指定的信號。
下面我們通過例子詳細(xì)介紹 killall 的 8 大用法。
假如我們 3 個進(jìn)程在運行,分別是 hello1, hello2, hello3
,現(xiàn)在我們想殺死 hello1 進(jìn)程,可以直接使用如下方式:
killall hello1
運行的結(jié)果如下:
[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin 12061 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello1
alvin 12074 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello2
alvin 12084 0.0 0.0 4152 340 pts/0 S 14:41 0:00 ./hello3
alvin 12089 0.0 0.0 112648 964 pts/0 R+ 14:41 0:00 grep --color=auto hello
[alvin@VM_0_16_centos test]$ killall hello1
[1] Terminated ./hello1
[alvin@VM_0_16_centos test]$ ps aux | grep hello
alvin 12074 0.0 0.0 4152 344 pts/0 S 14:41 0:00 ./hello2
alvin 12084 0.0 0.0 4152 340 pts/0 S 14:41 0:00 ./hello3
alvin 12170 0.0 0.0 112648 964 pts/0 R+ 14:42 0:00 grep --color=auto hello
可以看到,hello1 進(jìn)程已經(jīng)被殺死了。
剩下的 hello2 和 hello3 進(jìn)程,我們想一次性殺死他們,也就是批量殺死進(jìn)程,可以如下操作:
[alvin@VM_0_16_centos test]$ killall hello*
hello: no process found
hello1: no process found
hello.c: no process found
[2]- Terminated ./hello2
[3]+ Terminated ./hello3
如此,以 hello 開頭的進(jìn)程全部被干掉。
我們可以殺死以滿足某個正則表達(dá)式的一組進(jìn)程,同樣的,我們也可以殺死某個用戶運行的所有進(jìn)程。
比如,用戶 harry 現(xiàn)在運行如下幾個進(jìn)程:
[alvin@VM_0_16_centos test]$ ps aux | grep harry
root 13675 0.0 0.2 148236 5584 ? Ss 14:55 0:00 sshd: harry [priv]
harry 13677 0.0 0.1 148236 2944 ? S 14:55 0:00 sshd: harry@pts/1
root 13678 0.0 0.2 148236 5444 ? Ss 14:55 0:00 sshd: harry [priv]
harry 13680 0.0 0.1 148236 2252 ? S 14:55 0:00 sshd: harry@notty
harry 13681 0.0 0.1 53228 2168 ? Ss 14:55 0:00 /usr/libexec/openssh/sftp-server
harry 13694 0.0 0.1 116436 3252 pts/1 Ss+ 14:55 0:00 -bash
harry 13948 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello1
harry 13952 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello2
harry 13959 0.0 0.0 4152 344 pts/1 S 14:57 0:00 ./hello3
alvin 14005 0.0 0.0 112648 964 pts/0 R+ 14:58 0:00 grep --color=auto harry
我們現(xiàn)在想殺死 harry 所運行的所有進(jìn)程,可以以如下方式操作:
killall -u harry
運行結(jié)果如下:
[alvin@VM_0_16_centos test]$ sudo killall -u harry
[alvin@VM_0_16_centos test]$ ps aux | grep harry
alvin 14040 0.0 0.0 112648 964 pts/0 R+ 14:58 0:00 grep --color=auto harry
但是,這個選項要慎用,因為它會把該用戶所有進(jìn)程,包括終端進(jìn)程,全部殺死,將導(dǎo)致該用戶直接退出。所以,如果不想挨揍的話不要輕意嘗試這個選項。
假如我們現(xiàn)在運行了很多程序,我們只想殺死運行時間超過 5h 的進(jìn)程,那么可以使用 -o
選項,其中 o 代表 older 如下:
killall -o 5h
同樣地,如果你想殺死進(jìn)行時間小于 4h 的進(jìn)程,那么可以使用 -y
選項,其中 y 代表 younger ,如下:
killall -y 4h
這兩個選項同樣非常粗暴,也會把終端退出,所以先不演示了。
默認(rèn)情況下,killall 命令是大小寫敏感的,所以我們?nèi)绻麑戝e大小寫,將無法正確殺死進(jìn)程。
[alvin@VM_0_16_centos test]$ killall HELLO1
TEST1: no process found
如果我們想忽略大小寫,可以加上 -I
(大寫字母 i )選項。
[alvin@VM_0_16_centos test]$ killall -I HELLO1
[1] Terminated ./hello1
默認(rèn)情況下,killall 會告訴你命令執(zhí)行情況,但是,我們?nèi)绻魂P(guān)心它的執(zhí)行結(jié)果,只想讓它靜默執(zhí)行,該怎么辦?只需加上 -q
選項即可,其中 q 表示 quite , 如下:
[alvin@VM_0_16_centos test]$ killall HELLO2
HELLO2: no process found
[alvin@VM_0_16_centos test]$ killall -q HELLO2
[alvin@VM_0_16_centos test]$
如前文所述,默認(rèn)情況下,killall 命令將發(fā)送 SIGTERM 信號,那么,安可以發(fā)送其它信號嗎?當(dāng)然是可以的。可以使用 -l
選項查看 killall 所支持的所有信號:
[alvin@VM_0_16_centos test]$ killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
你可以使用 -s
選項(后面跟一個信號名)來向一個進(jìn)程發(fā)送特殊信號。
如果你在殺死多個進(jìn)程時不太放心,擔(dān)心把不該殺死的進(jìn)程給殺死了,那么你可以使用 -i
選項,這樣就可以自由決定哪些進(jìn)程應(yīng)該被殺死,哪些進(jìn)程應(yīng)該被保留。
[alvin@VM_0_16_centos test]$ killall -i hello*
Kill hello2(13825) ? (y/N) y
Kill hello3(13831) ? (y/N) N
hello: no process found
hello1: no process found
hello3: no process found
hello.c: no process found
[2]- Terminated ./hello2
當(dāng)一個信號被發(fā)送至某個進(jìn)程,如果你想確定該進(jìn)程已經(jīng)被殺死了才返回執(zhí)行結(jié)果,可以使用 -w
選項,其中 w 代表 wait ,如下:
[alvin@VM_0_16_centos test]$ killall -w hello1
[4]+ Terminated ./hello1
這里好像看不出什么效果,但實際執(zhí)行的時候,可以發(fā)現(xiàn)執(zhí)行結(jié)果會在一兩秒后出現(xiàn),而不加 -w 選項的話,執(zhí)行結(jié)果馬上就顯示。
分享題目:Linux下使用killall命令終止進(jìn)程的8大用法-創(chuàng)新互聯(lián)
文章URL:http://chinadenli.net/article42/ddiehc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、ChatGPT、建站公司、關(guān)鍵詞優(yōu)化、全網(wǎng)營銷推廣、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容