我使用以下脚本按超时终止进程:

# $1 - name of program and its command line

#launch program and remember PID
eval "$1" &
PID=$!

echo "Program '"$1"' started, PID="$PID

i=1
while [ $i -le 300 ]
do
 ps -p $PID >> /dev/null
 if [ $? -ne 0 ]
  then
   wait $PID
   exit $? #success, return rc of program
  fi

 i=$(($i+1))
 echo "waiting 1 second..."
 sleep 1
done

#program does not want to exit itself, kill it
echo "killing program..."
kill $PID
exit 1 #failed

到目前为止,它工作得很好,但是今天,我注意到htop中有一堆“挂起”进程,所以我签了出来,结果发现,在本例中$PID不是程序进程的id,而是脚本本身的id,而且每次我检查,程序的id都是$PID+1。现在,问题是,我的假设是正确的吗,它总是$PID+1的,我不会用类似于kill $PID的东西替换kill $PID $($PID+1)来杀死重要的东西。
编辑:$1可能有几个urguments,如./bzip2 -ds sample3.bz2 -k

最佳答案

您可以通过以下更改简单地解决问题:
发件人:

eval "$1" &

到:
eval "$1 &"

原因在this answer中有解释。

关于linux - 如何正确杀死bash中的进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18401506/

10-13 07:23
查看更多