我用下面的腳本通過超時殺進程的過程:怎樣一個人準確地殺死在bash
# $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
沒有,PID可以是任何東西。這取決於系統上運行的內容。 – choroba
您可以使用'pidof'來返回進程的PID。在這種情況下,將會是'$ 1'。 –
@SakthiKumar可能是exacly我需要什麼,謝謝,我會測試它,並很快回復 – Shf