转载:https://blog.csdn.net/u____/article/details/79859503

1、场景

在一个Linux机器上起了很多个cpu.sh的脚本,如下图,想一次性把他们kill掉

2、方法

2.1去除grep cpu

上图中可以看到最后一个pid为22603的进程是grep cpu进程,并非cpu.sh,怎么把它去除呢,通过ps -efw | grep cpu |grep -v grep达到目的

 

为什么能达到这个效果?

我们通过grep --help看

 

 

可以看出

1.grep 是查找含有指定文本行的意思,比如grep cpu 就是查找含有cpu的文本的行

2.grep -v 是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的行

2.2杀进程

使用ps -efw一个一个查看cpu.sh的PID,然后一个一个kill -9 PID或 kill -9 PID1 PID2 PID3

kill -9后面支持多个PID,意思是将这些PID全部kill掉

2.3进阶

kill -9 `ps -ef|grep cpu|grep -v grep|awk '{print $2}'`

kiil -9后面``里面的内容表示参数输入,而ps -ef|grep cpu|grep -v grep|awk '{print $2}'的的效果需要说明Linux的一个原理

管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。

那么这个命令行的解析如下:

1、ps -ef 显示所有的进程,其中后面的e是显示结果的意思,f是显示完整格式,其他比如-w是不限制列宽显示,具体可见ps --help all

2、ps -ef|grep cpu作用是把包括cpu这个关键字的进程都显示出来

3、如2.1所示,ps -ef|grep cpu会把grep cpu的进程也统计进来,因此用ps -ef|grep cpu|grep -v grep去除grep进程

4、最后,只包含cpu关键字的进程筛选结果作为输入给awk '{print $2}',这个部分的作用是提取输入的第二列,而第二列正是进程的PID

执行效果见下图

 

附录:

本文内容参考了

https://blog.csdn.net/beyondlpf/article/details/8065070

作者还提及了pgrep、pidof、xargs、pkill和killall等命令行,很有意思,尤其是pkill,达到本文档目的用pkill只需要pkill -9 cpu即可,很简洁,但不知道在我的机器上为何没有生效,mark下,后续研究


————————————————
版权声明:本文为CSDN博主「u____」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u____/article/details/79859503

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐