根据关键字杀死进程最安全的方法

提到根据关键字杀死进程,第一反应一定是先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号变化了,这时候就会报错,如下图,报错的原因就是kill -9 进程号的进程号不存在了,如果是在shell脚本里执行的话,命令返回值就不是0了,就会导致shell脚本退出

根据关键字杀死进程最安全的方法

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

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

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 关键字

上一篇:MST:Roadblocks(POJ 3255)


下一篇:JavaScript点击切换图片事件