前言
在Linux作業系統中,一般常用的殺死程序的指令是 kill 、 pkill 、 killall ,根據殺死單個程序拓展至批量殺死程序。
1、檢視指定名稱的程序,如下檢視運作wps程式的程序:
ps -ef | grep wps | grep -v grep
結果如下:
2、根據程序号(PID)殺死程序:第二列顯示的就是程序号
kill 指令殺死指定程序PID的程序
kill PID
3、強制殺死程序。(有些程序可能殺不死,就加個 -9
參數,強制将其殺死)
-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’字段的程序,如下圖所示:
2、
2、 cut 9-15
從輸出結果的每行字元串中截取第9-15個字元, 剛好就是我們所需的程序号,如下圖所示:
3、 xargs kill -9
指令 xargs 是将前面提取到的所有的程序号,作為參數傳給指令 kill -9 , 這樣我們就能殺死所有的程序。( xargs kill -9 中的 xargs 指令是用來把前面指令的輸出結果(PID)作為 kill -9 指令的參數,并執行該令)
如下圖所示:
指令執行結果:如下圖所示,已經成功殺死了所有程序名中包含‘AI_srever’字段的所有程序
方法三進階優化:
ps -ef | grep LOCAL=NO | grep -v grep | cut -c 9-15 | xargs kill -9
注意:(參照方法三中的批量殺死程序的執行結果)使用 ps -ef | grep xxx 指令根據程序名中的字段查找程序ID的時候,同時會包含含有關鍵字《grep》的程序。如下圖所示:
解決辦法: grep -v grep 是在列出的程序中去除含有關鍵字 grep 的程序。
方法四
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}' 列出了所有要殺死的程序,并将之列印在了螢幕上。如下圖所示:
4、 指令ps -ef|grep aaa|grep -v grep|awk '{print "kill -9 " $2}' |sh 與3相比,其實是在3指令後面加上了 |sh ,表示執行列印出來的這些指令,進而達到殺死程序名中包含xx字段的程序。
方法六
ps -ef|grep check_os.sh | grep -v grep | awk '{print $2}' | xargs kill -9
1、 指令 awk '{print $2}' 表示輸出第二列的程序PID。如下圖所示:
其他詳細解釋參照方法三和方法四
方法七
執行指令,将需要殺死的程序号指派給變量,再使用指令 kill -9 殺死他們
pidlist=`ps -ef |grep tomcat |grep -v grep|awk '{print $2}'`
kill -9 $pidlist
将程序号被指派的變量值列印出來:
再執行指令 kill -9 $pidlist 結果如下圖所示: