誰かが私にこれを手伝ってくれることを願っていました 15秒間ループ内にあるものを実行するシェルスクリプトのループが必要です。たとえば、bash - 設定されたタイムアウト後にサブプロセスを終了する
if (true)
run command for 15 seconds
fi
kill PID
私はシェルスクリプトには新しいので、私はこれで迷っています。 はまた、私はそれが何の違い
を行った場合、任意のヘルプは
誰かが私にこれを手伝ってくれることを願っていました 15秒間ループ内にあるものを実行するシェルスクリプトのループが必要です。たとえば、bash - 設定されたタイムアウト後にサブプロセスを終了する
if (true)
run command for 15 seconds
fi
kill PID
私はシェルスクリプトには新しいので、私はこれで迷っています。 はまた、私はそれが何の違い
を行った場合、任意のヘルプは
次のbashスクリプトが役立ちます。スクリプトは、ループを開始する前に変数として初期エポック時間を設定します。ループが実行されている間、追加の変数は現在のエポック時間で設定されます。どちらのエポックタイムも比較され、差が15以下であれば、コマンドは引き続き実行されます。以下のスクリプトでは、現在実行中のコマンドは$ {COUNTER} "を数えるエコーであることに注意してください。あなたが達成しようとしているものと一致するようにスクリプトのこの部分を変更する必要があります。 2つのエポック時間の差が15を超えると、スクリプトは終了します。この時点でkillコマンドを開始する必要があります。エラーが発生した場合は、 "YourLogFile"に "ERROR ... YourScript.sh failed"と表示されるはずです(ログファイルを希望するものに設定してください)。
注:このループ内で実行しようとするものは、 15秒以内に何度も何度も何度も走っています。以下のスクリプトをテストとして利用すると、echoコマンドが1秒間に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
$ {COUNTER} "を数える' echo "を置き換えるコマンドはブロックし、終了しません。遅い接続で長いビデオをダウンロードするとします。 –
[バッシュのhttp://stackoverflow.com/questions/526782/how-do-i-limit-the-running-time-of-a-bash-script/526815#526815 – paxdiablo
が重複する可能性を参照してください。与えられたタイムアウト後に子プロセスを殺すスクリプト](http://stackoverflow.com/questions/5161193/bash-script-that-kills-a-child-process-after-a-given-timeout) –