我希望有人能夠幫我解決這個問題 我需要一個shell腳本的循環來運行循環中的內容15秒。所以例如bash - 在設定的超時後終止一個子進程
if (true)
run command for 15 seconds
fi
kill PID
我是新的shell腳本,所以我失去了這一點。 另外我使用的是Debian instll如果讓任何區別
任何幫助表示讚賞
我希望有人能夠幫我解決這個問題 我需要一個shell腳本的循環來運行循環中的內容15秒。所以例如bash - 在設定的超時後終止一個子進程
if (true)
run command for 15 seconds
fi
kill PID
我是新的shell腳本,所以我失去了這一點。 另外我使用的是Debian instll如果讓任何區別
任何幫助表示讚賞
下面的bash腳本可能適合你。該腳本將在開始循環之前將初始時間點設置爲變量。當循環運行時,一個額外的變量將被設置爲當前的歷元時間。兩個時代將進行比較,只要差異小於或等於15,您的命令將繼續運行。請注意,在下面的腳本中,當前運行的命令是'echo',計數$ {COUNTER}「'。您應該更改腳本的這一部分以匹配您正在嘗試完成的內容。一旦兩個時代的差異大於15,劇本將退出。此時您需要啓動kill命令。如果發生錯誤,您應該在「YourLogFile」中看到「ERROR ... YourScript.sh失敗」(將您的日誌文件設置爲所需內容)
注意:無論您在此循環中嘗試運行在15秒內跑很多次。通過使用下面的腳本作爲測試,您將看到echo命令每秒運行超過50次。
#!/bin/bash
LOOP="true"
INITIAL_TIME=$(date "+%s")
while [[ ${LOOP} == true ]]; do
CURRENT_TIME=$(date "+%s")
COUNTER=$(expr ${CURRENT_TIME} - ${INITIAL_TIME})
if [[ ${COUNTER} -le "15" ]]; then
echo "counting ${COUNTER}"
# RUN YOUR COMMAND IN PLACE OF THE ABOVE echo COMMAND
elif [[ ${COUNTER} -gt "15" ]]; then
exit 0
#INITIATE YOUR KILL COMMAND IN PLACE OF OR BEFORE THE exit
else
echo "ERROR... YourScript.sh failed" >> /YourLogFile
fi
done
這個命令替換'echo'計數$ {COUNTER}「'會阻塞並且不終止 - 比如通過慢速連接下載一個長視頻。 – 2012-04-23 16:55:17
參見[猛砸http://stackoverflow.com/questions/526782/how-do-i-limit-the-running-time-of-a-bash-script/526815#526815 – paxdiablo 2012-04-23 08:45:12
可能重複在給定的超時後殺死子進程的腳本](http://stackoverflow.com/questions/5161193/bash-script-that-kills-a-child-process-after-a-given-timeout) – 2012-04-23 15:53:16