天天看點

Linux作業系統之批量殺死程序

前言

在Linux作業系統中,一般常用的殺死程序的指令是 kill 、 pkill 、 killall ,根據殺死單個程序拓展至批量殺死程序。

1、檢視指定名稱的程序,如下檢視運作wps程式的程序:

ps -ef | grep wps | grep -v grep      

結果如下:

Linux作業系統之批量殺死程式

2、根據程序号(PID)殺死程序:第二列顯示的就是程序号

 kill 指令殺死指定程序PID的程序

kill PID      

3、強制殺死程序。(有些程序可能殺不死,就加個​

​-9​

​參數,強制将其殺死)

kill -9 PID      

4、殺死多個程序,在指令 kill -9 後面跟多個程序的PID号即可。(程序号之間以空格隔開)

kill -9 PID1 PID2 PID3 ...      

方法一:強制殺死某個端口号下的所有程序

示例:殺死tcp端口8080下的所有程序

sudo fuser -k -n tcp 8080      

方法二: 殺死某個指令下的所有程序

執行個體1:使用 killall 指令殺死所有python3 執行的程式: killall [參數] [程序名] 

 killall 指令用于殺死指定名字的程序(kill processes by name)

sudo killall python3      

注意:一般情況下,不會采用該方法去批量殺死程序,因為此方法可能會造成誤殺。

執行個體2:使用 pkill 指令殺死所有python3執行的程式: pkill [參數] [程序名] 

 pkill 指令與 killall 指令相同,同樣用于殺死指定名字的程序(kill processes by name)

sudo pkill python3      

方法三:殺死程序名中含有xxx字段的所有程序

執行個體:殺死程序名中含 ‘AI_server’ 字段的所有程序

ps -def |grep 'AI_server' |cut -c 9-15| xargs kill -9      

對上述方法中的三個子指令詳解:

1、 ps -ef |grep 'AI_server' 

這個指令會查出所有程序名字中含有‘AI_server’字段的程序,如下圖所示:

Linux作業系統之批量殺死程式

2、 

2、 cut 9-15 

從輸出結果的每行字元串中截取第9-15個字元, 剛好就是我們所需的程序号,如下圖所示:

Linux作業系統之批量殺死程式

3、 xargs kill -9 

指令 xargs 是将前面提取到的所有的程序号,作為參數傳給指令 kill -9 , 這樣我們就能殺死所有的程序。( xargs kill -9 中的 xargs 指令是用來把前面指令的輸出結果(PID)作為 kill -9 指令的參數,并執行該令)

如下圖所示:

Linux作業系統之批量殺死程式

指令執行結果:如下圖所示,已經成功殺死了所有程序名中包含‘AI_srever’字段的所有程序

Linux作業系統之批量殺死程式

方法三進階優化:

ps -ef | grep LOCAL=NO | grep -v grep | cut -c 9-15 | xargs kill -9      

注意:(參照方法三中的批量殺死程序的執行結果)使用 ps -ef | grep xxx 指令根據程序名中的字段查找程序ID的時候,同時會包含含有關鍵字《grep》的程序。如下圖所示:

Linux作業系統之批量殺死程式

解決辦法: grep -v grep 是在列出的程序中去除含有關鍵字 grep 的程序。

Linux作業系統之批量殺死程式

方法四

ps -ef|grep aaa|grep -v grep|awk  '{print "kill -9 " $2}' |sh      

指令詳解:

1、指令 grep -v grep 是過濾掉 grep 指令本身的程序;

2、$2表示第2列,即程序号PID;

3、指令 ps -ef | grep aaa | grep -v grep|awk '{print "kill -9 "$2}'  列出了所有要殺死的程序,并将之列印在了螢幕上。如下圖所示:

Linux作業系統之批量殺死程式

4、 指令ps -ef|grep aaa|grep -v grep|awk '{print "kill -9 " $2}' |sh 與3相比,其實是在3指令後面加上了 |sh ,表示執行列印出來的這些指令,進而達到殺死程序名中包含xx字段的程序。

Linux作業系統之批量殺死程式

方法六

ps -ef|grep check_os.sh | grep -v grep | awk '{print $2}' | xargs kill -9      

1、 指令 awk '{print $2}' 表示輸出第二列的程序PID。如下圖所示:

Linux作業系統之批量殺死程式

其他詳細解釋參照方法三和方法四

方法七

 執行指令,将需要殺死的程序号指派給變量,再使用指令 kill -9 殺死他們

pidlist=`ps -ef |grep tomcat |grep -v grep|awk '{print $2}'`
kill -9 $pidlist      

将程序号被指派的變量值列印出來:

Linux作業系統之批量殺死程式

再執行指令 kill -9 $pidlist 結果如下圖所示: