根据关键字杀死进程最安全的方法(亲测,放心使用)

提到根据关键字杀死进程,第一反应一定是先ps -ef | grep 关键字,查找到满足条件的pid列表,再kill掉

常见的写法就是:ps -ef | grep 关键字 | grep -v grep | awk '{print $2}' | xargs kill -9,只需要一句话。

但是总会出现极端情况,导致报错,下面是我遇到的两个极端情况:

1、ps -ef | grep 关键字| grep -v grep 这一步的时候pid号还存在,但是xargs kill -9的时候进程已经退出,pid号不存在了,这时候就会报错,如下图所示,报错的原因是kill -9 后面没有pid号,实际上是kill命令的语法错误

解决办法:ps查询和kill分开,当pids确实存在再去kill

2、ps -ef | grep 关键字| grep -v grep 这一步的时候pid号存在,但是xargs kill -9时,进程pid号变化了,这时候就会报错no such process,如下图,报错的原因是kill的进程号不存在了,如果是在shell脚本里执行的话,命令返回值就不是0了,就会导致shell脚本退出

 解决办法:kill -9 $pids || true  后面多加一个|| true,这样虽然还是会报“没有那个进程”的错误,但该命令的返回值是0,不会导致shell脚本退出

因此,考虑上面两点,最安全的办法是封装一个函数,在shell脚本中调用该函数

function KillTask()
{
    Task=$1
    pids=$(ps -ef | grep $Task | grep -v grep |awk '{print $2}'| xargs)
    if [ ! -z "$pids" ];then kill -9 $pids || true; fi  
}

调用方法:KillTask 关键字,比如KillTask hello

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值