1. 程式人生 > >搜索關鍵字殺一組進程

搜索關鍵字殺一組進程

好玩 關鍵字 輸出結果 lin ash 其中 mon 還需 清理

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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

搜索關鍵字殺一組進程