zoukankan      html  css  js  c++  java
  • 搜索关键字杀一组进程

    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
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    单词 统计
    第十周学习记录
    梦断代码阅读笔记03
    梦断代码阅读笔记02
    梦断代码阅读笔记01
    用户模板和用户场景
    第九周学习记录
    分享好友-分享朋友圈
    生命周期函数-页面刷新
    底部导航的设置
  • 原文地址:https://www.cnblogs.com/onelikeone/p/8438286.html
Copyright © 2011-2022 走看看