2012-04-23 94 views
2

我希望有人能夠幫我解決這個問題 我需要一個shell腳本的循環來運行循環中的內容15秒。所以例如bash - 在設定的超時後終止一個子進程

if (true) 
    run command for 15 seconds 
fi 
    kill PID 

我是新的shell腳本,所以我失去了這一點。 另外我使用的是Debian instll如果讓任何區別

任何幫助表示讚賞

+0

參見[猛砸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

+1

可能重複在給定的超時後殺死子進程的腳本](http://stackoverflow.com/questions/5161193/bash-script-that-kills-a-child-process-after-a-given-timeout) – 2012-04-23 15:53:16

回答

3

您正在尋找的timeout命令?

+0

我試過使用但我不能讓它工作我也試過使用ping -c 15 127.0.0.1 – AlanF 2012-04-23 09:32:03

+0

'timeout 15 command'? – huon 2012-04-23 09:34:01

+0

@AlanF:你在說ping嗎?你試過'ping -w1 -c15 127.0.0.1'嗎?或者ping只是一個例子? – 2012-04-23 16:56:49

0

下面的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 
+0

這個命令替換'echo'計數$ {COUNTER}「'會阻塞並且不終止 - 比如通過慢速連接下載一個長視頻。 – 2012-04-23 16:55:17