我不是腳本專家,我想知道什麼是最多x毫秒運行腳本的可接受方式(並且如果腳本在超時之前完成,則在x毫秒之前完成)。Un * x shell腳本:最多x毫秒運行腳本的正確方法是什麼?
我使用Bash解決了這個問題,我認爲這很不方便,我想知道是否有更好的方法來做到這一點。
基本上我有一個shell腳本稱爲sleep_kill.sh
接受一個PID作爲第一個參數和超時作爲其第二個參數,並且這樣處理:
sleep $2
kill -9 $1 2> /dev/null 1> /dev/null
因此,如果PID對應於一個腳本在超時之前完成,沒有任何事情會被殺死(我認爲操作系統沒有時間重複使用這個PID作爲另一個[無關的]進程,看到它在所有進程ID中「循環」,然後開始重用它們)。
無論如何,後來我打電話給我的劇本,可能「掛起」或超時:
command_that_may_hang.sh
PID=$!
sleep_kill.sh $PID .3
wait $PID > /dev/null 2>&1
我會等待最多300毫秒command_that_may_hang.sh
。然而,如果command_that_may_hang.sh
只需要10毫秒執行,我將不會在300毫秒內「卡住」。
如果一些shell專家可以解釋這種方法的缺點以及應該做些什麼,那將會很棒。
請參閱http://stackoverflow.com/questions/526782/how-do-i-limit-the-running-time-of-a-bash-script – kennytm 2010-02-02 04:32:55
如果您真的決定使用小於1秒鐘,你會想考慮使用一個特殊的驅動程序的應用程序。即使你有一個sleepMilli,在shell的級別上進行調度也可能會導致300 ms的延遲。 – gary 2010-02-02 05:28:52