标签:ps grep pid 关键字 kill 进程 杀死 报错
提到根据关键字杀死进程,第一反应一定是先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 关键字
标签:ps,grep,pid,关键字,kill,进程,杀死,报错 来源: https://blog.csdn.net/weixin_40547071/article/details/122307817
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。