我一直试图找到并杀死在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 ]
你能告诉我这里我做错了吗
答案 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