溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Linux中使用killall命令終止進(jìn)程

發(fā)布時(shí)間:2021-04-01 17:55:36 來源:億速云 閱讀:204 作者:Leah 欄目:服務(wù)器

這篇文章給大家介紹怎么在Linux中使用killall命令終止進(jìn)程,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

1、基本用法

假如我們 3 個(gè)進(jìn)程在運(yùn)行,分別是 hello1, hello2, hello3 ,現(xiàn)在我們想殺死 hello1 進(jìn)程,可以直接使用如下方式:

killall hello1

運(yùn)行的結(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)程全部被干掉。

2、終止某個(gè)用戶所運(yùn)行的進(jìn)程

我們可以殺死以滿足某個(gè)正則表達(dá)式的一組進(jìn)程,同樣的,我們也可以殺死某個(gè)用戶運(yùn)行的所有進(jìn)程。

比如,用戶 harry 現(xiàn)在運(yùn)行如下幾個(gè)進(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 所運(yùn)行的所有進(jìn)程,可以以如下方式操作:

killall -u harry

運(yùn)行結(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

但是,這個(gè)選項(xiàng)要慎用,因?yàn)樗鼤?huì)把該用戶所有進(jìn)程,包括終端進(jìn)程,全部殺死,將導(dǎo)致該用戶直接退出。所以,如果不想挨揍的話不要輕意嘗試這個(gè)選項(xiàng)。

3、終于時(shí)間的方式終止進(jìn)程

假如我們現(xiàn)在運(yùn)行了很多程序,我們只想殺死運(yùn)行時(shí)間超過 5h 的進(jìn)程,那么可以使用 -o 選項(xiàng),其中 o 代表 older 如下:

killall -o 5h

同樣地,如果你想殺死進(jìn)行時(shí)間小于 4h 的進(jìn)程,那么可以使用 -y 選項(xiàng),其中 y 代表 younger ,如下:

killall -y 4h

這兩個(gè)選項(xiàng)同樣非常粗暴,也會(huì)把終端退出,所以先不演示了。

4、忽略大小寫

默認(rèn)情況下,killall 命令是大小寫敏感的,所以我們?nèi)绻麑戝e(cuò)大小寫,將無法正確殺死進(jìn)程。

[alvin@VM_0_16_centos test]$ killall HELLO1 
TEST1: no process found

如果我們想忽略大小寫,可以加上 -I (大寫字母 i )選項(xiàng)。

[alvin@VM_0_16_centos test]$ killall -I HELLO1 
[1]  Terminated       ./hello1

5、關(guān)閉命令執(zhí)行回顯

默認(rèn)情況下,killall 會(huì)告訴你命令執(zhí)行情況,但是,我們?nèi)绻魂P(guān)心它的執(zhí)行結(jié)果,只想讓它靜默執(zhí)行,該怎么辦?只需加上 -q 選項(xiàng)即可,其中 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]$

6、列出所有支持的信號(hào)

如前文所述,默認(rèn)情況下,killall 命令將發(fā)送 SIGTERM 信號(hào),那么,安可以發(fā)送其它信號(hào)嗎?當(dāng)然是可以的??梢允褂?-l 選項(xiàng)查看 killall 所支持的所有信號(hào):

[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 選項(xiàng)(后面跟一個(gè)信號(hào)名)來向一個(gè)進(jìn)程發(fā)送特殊信號(hào)。

7、交互式操作

如果你在殺死多個(gè)進(jìn)程時(shí)不太放心,擔(dān)心把不該殺死的進(jìn)程給殺死了,那么你可以使用 -i 選項(xiàng),這樣就可以自由決定哪些進(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

8、等待直到某個(gè)進(jìn)程被終止

當(dāng)一個(gè)信號(hào)被發(fā)送至某個(gè)進(jìn)程,如果你想確定該進(jìn)程已經(jīng)被殺死了才返回執(zhí)行結(jié)果,可以使用 -w 選項(xiàng),其中 w 代表 wait ,如下:

[alvin@VM_0_16_centos test]$ killall -w hello1 
[4]+ Terminated       ./hello1

關(guān)于怎么在Linux中使用killall命令終止進(jìn)程就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI