搜索關鍵字殺一組進程
https://www.jianshu.com/p/c89f7e6e1255
有時候,系統裏運行了一堆進程需要清理一下。
普通青年的殺法是ps aux | grep 關鍵字, 找到了之後,再用kill命令一個一個地殺。
這樣做的效率太低了,於是在網上搜到了各種辦法。各有千秋,還真挺好玩的。
cut大法
ps -ef|grep 關鍵字|grep -v grep|cut -c 9-15|xargs kill -9
|是管道,把管道左邊的結果傳給右邊的命令
首先還是傳統的grep ps的結果。但是這其中就有ps grep本身,所以要通過grep -v grep把帶grep命令本身的過濾掉。
經過這兩步,打印出來的是這樣的格式:
命令是:
ps -ef|grep distcc|grep -v grep
輸出結果為:
distccd 8410 20190 0 18:13 ? 00:00:00 /usr/local/bin/distccd --pid-file=/tmp/distccd.pid --log-file=/tmp/distccd.log --daemon --allow 10.0.0.0/8 --allow 100.0.0.0/8 --nice 10
distccd 8685 20190 0 18:13 ? 00:00:00 /usr/local/bin/distccd --pid-file=/tmp/distccd.pid --log-file=/tmp/distccd.log --daemon --allow 10.0.0.0/8 --allow 100.0.0.0/8 --nice 10
distccd 10103 20190 0 18:13 ? 00:00:00 /usr/local/bin/distccd --pid-file=/tmp/distccd.pid --log-file=/tmp/distccd.log --daemon --allow 10.0.0.0/8 --allow 100.0.0.0/8 --nice 10
distccd 10588 20190 0 18:14 ? 00:00:00 /usr/local/bin/distccd --pid-file=/tmp/distccd.pid --log-file=/tmp/distccd.log --daemon --allow 10.0.0.0/8 --allow 100.0.0.0/8 --nice 10
distccd 11139 20190 0 18:14 ? 00:00:00 /usr/local/bin/distccd --pid-file=/tmp/distccd.pid --log-file=/tmp/distccd.log --daemon --allow 10.0.0.0/8 --allow 100.0.0.0/8 --nice 10
接著cut命令出場,切出來第9字符到第15字符的結果,剛好是進程號這部分:
8410
8685
10103
10588
11139
最後,將這些進程號,通過xargs傳給kill -9去殺掉。
這個方法簡單粗暴,不過有點過於精確了。比如在macOS上就不靈了,因為格式不同。在我的macBookPro上,打出來的格式是這樣的:
501 12652 949 0 6:32下午 ttys003 0:00.00 -bash
501 12691 949 0 6:33下午 ttys003 0:00.00 -bash
501 12765 949 0 6:34下午 ttys003 0:00.00 -bash
501 95552 949 0 五06下午 ttys003 0:00.00 -bash
要是還按9-15切,就亂套了。
awk大法
通過具體的列來切,適應性是差了點。我們有什麽辦法能按分隔符來取呢? 我們可以借助awk工具,awk ‘{print $1}‘
是打印第一列,awk ‘{print $2}‘
是第二列。
ps aux|grep 關鍵字 |grep -v grep |awk ‘{print $2}‘|xargs kill -9
這個方法,終於在Linux和mac上都OK了。
pgrep大法
做為殺進程這麽常用的功能,怎麽還需要勞煩cut和awk呢,系統已經提供了pgrep命令,專搜進程號。
pgrep 關鍵字 | xargs kill -9
終於不用數cut哪幾列,也不用知道awk的命令是什麽鬼了。
pkill
不過,慢著,既然都有pgrep了,還需要麻煩xargs嗎?
是的,用不著了,pgrep有個馬甲叫pkill,搜到了直接殺。
pkill 關鍵字
pkill和killall的區別
killall可以將同名進程都殺掉,比如開了n個adb,用killall adb就殺了。但是killall需要的是全名,而pkill只要部分名字就可以了,比如用pkill ad,一樣將所有adb都殺光。
作者:Jtag特工
鏈接:https://www.jianshu.com/p/c89f7e6e1255
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
搜索關鍵字殺一組進程