次のスクリプトを使用して、タイムアウトでプロセスを強制終了します。
# $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