我使用以下脚本通过超时终止进程:
# $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 都是$PID+1
. 现在,问题是,我的假设是否正确,它将永远存在$PID+1
,而且我不会通过替换为类似的东西来杀死重要的kill $PID
东西kill $PID $($PID+1)
编辑:$1
可能有几个要求,比如./bzip2 -ds sample3.bz2 -k