在ksh脚本(linux)中查找并终止进程无法正常工作

时间:2015-11-06 16:00:55

标签: ksh kill

我一直试图找到并杀死在linux机器上的ksh脚本中停止后留下的任何过时进程,它似乎无法正常工作。它可以从命令行运行,但在脚本中

这是代码

echo "kill any process still running"
ps -ef | grep qpasa |grep -v grep | awk '{print $2}' |xargs kill

这是脚本日志的输出

usage: kill [ -s signal | -p ] [ -a ] pid ...
       kill -l [ signal ]
你能告诉我这里我做错了吗

1 个答案:

答案 0 :(得分:1)

我认为您在没有进程运行时调用脚本。在没有参数的情况下尝试kill,您会得到相同的信息 您可以将错误重定向到/dev/null,但我会尝试其他方法:

ps -ef | grep qpasa |grep -v grep | awk '{print $2}' | while read pid; do
   echo "Killing ${pid}"
   kill ${pid}
   sleep 2
   kill -9 ${pid} 2>/dev/null
done

第一个kill赋予qpasa停止控制的可能性:刷新缓存和关闭句柄。给qpasa 2秒钟 当qpasa忽略信号时,kill就会很难。当然这个过程可能已经停止了,所以这次我们要忽略错误信息。

当你有很多qpasa进程时,你只想睡2秒钟 首先通过友好的杀戮循环遍历所有进程,等待5秒,然后硬杀死你找到的进程。当您为循环创建函数kill_qpasa_signal(并使用$ 1作为终止信号)时,您可以使用

kill_qpasa_signal 15
sleep 5
kill_qpasa_signal 9