关键字杀进程

来源:互联网 发布:linux的home目录 编辑:程序博客网 时间:2024/05/29 16:41

不做运维,linux基础还真不如运维同学犀利,再次受教了,总结一下

背景

经常多进程部署服务,restart, stop时需要根据关键字搜索出这一组进程,杀掉
比如:python dir/tcp_server.py &多次执行起了多个进程,现在希望搜索dir/tcp_server.py 杀掉这组进程

CUT

ps -ef | grep dir/tcp_server.py | grep -v grep | cut -c 9-15 | xargs kill -9
首先是基础的ps -ef | grep XXX,搜索出XXX的进程信息,结果如下:

xxxxxxx    6014      1  0 Nov30 ?        02:26:01 python2.7 dir/tcpserver.py 51014xxxxxxx    6015      1  0 Nov30 ?        02:22:52 python2.7 dir/tcpserver.py 51015xxxxxxx    6016      1  0 Nov30 ?        02:26:52 python2.7 dir/tcpserver.py 51016xxxxxxx    6017      1  0 Nov30 ?        03:56:13 python2.7 dir/tcpserver.py 51017xxxxxxx    6018      1  0 Nov30 ?        02:24:23 python2.7 dir/tcpserver.py 51018xxxxxxx    6019      1  0 Nov30 ?        02:31:03 python2.7 dir/tcpserver.py 510196342     106660 106495  0 14:08 pts/5    00:00:00 grep dir/tcp_server.py
大家伙都能发现,结果包含grep进程自身,显然要排除出去,所以再次grep -v grep ,这样就只剩下希望被杀的那些进程了
接着是cut,截取9-15字符,刚好就是进程号,结果如下:
   6014   6015   6016   6017   6018   6019
最后,通过xargs传递给kill -9去杀死

AWK

cut适应性不给力,比如Mac就不能按9-15切割,那能不能智能一点点,就要获取进程号那一列.答案是 awk

ps aux | grep dir/tcp_server.py | grep -v grep | awk '{print $2}'| xargs kill -9

grep []

grep -v总让人感觉很蛋疼,能不能不要包含grep自身呢?答案是 grep []

ps aux | grep [d]ir/tcp_server.py | awk '{print $2}' | xargs kill -9

  • 注意: grep [d]ir/tcp_server.py 一句中的中括号

pgrep

关键字搜索一组进程,这么高频的实用的功能,为啥不先问问Linux自带有没有更好的呢?答案是 pgrep

pgrep -f dir/tcp_server.py | xargs kill -9

  • pgrep 默认只能匹配进程的前15个字符串,所以默认使用,你很可能搜索不到进程号
  • pgrep -f 可以进行进程全字符匹配
    所以,上面的命令带了-f参数

pkill

pgrep都这么便利了,xargs能不能也被"便利"一下呢? 答案是pkill

pkill -f dir/tcp_server.py

  • -f参数同pgrep
  • pkill和killall的区别:killall需要的是全名, pkill只要部分名字就可以

pgrep pkill更多详细命令参数,看官们就各自查阅吧

0 0
原创粉丝点击