shell批量杀进程(xargs)

背景:偶尔会遇到一些相同进程卡死的情况,监控不当的时候会影响应用,写个判断语句,定时监控,进程多的时候会自动清除

#!/bin/bash

#假设进程中同一包含akel关键字
str=`ps -ef|grep akel | wc -l`

if (( $str >20 ));then

#判断该进程卡死的数量,用cut截取进程号

ps -ef | grep akel | grep -v grep | cut -c 9-15 | xargs kill -9
ps -ef | grep 192.168.1.1 | grep -v grep | cut -c 9-15 | xargs kill -9


cd /opt/data
rm -f akel_3*.txt
rm -f */*.gz
rm -f */*/*.gz

fi

注意这里用到了xargs,这个东西跟管道什么区别呢

举两个例子:‘echo '--help' | cat ’ ‘ echo '--help' | xargs cat’

可以看到 echo '--help' | cat   该命令输出的是echo的内容,也就是说将echo的内容当作cat处理的文件内容了,实际上就是echo命令的输出通过管道定向到cat的输入了。然后cat从其标准输入中读取待处理的文本内容。这等价于在test.txt文件中有一行字符 '--help' 然后运行  cat test.txt 的效果。

而 echo '--help' | xargs cat 等价于 cat --help 什么意思呢,肯定不会有结果的啊,就是xargs将其接受的字符串 --help 做成cat的一个命令参数来运行cat命令,同样  echo 'test.c test.cpp' | xargs cat 等价于 cat test.c test.cpp 此时会将test.c和test.cpp的内容都显示出来。

参考https://www.cnblogs.com/wangqiguo/p/6464234.html,很详细

猜你喜欢

转载自blog.csdn.net/qq_34485930/article/details/80755367