2016-10-10 5 views
0

、あなたは単にプロセスの前にtimeoutを使用することができます。それは1.5秒後に行われなかった場合プロセスが終了したかどうかを確認するには?あなたは、プロセスのために時間制限を設定したい場合は

timeout 1.5s COMMAND 

これはCOMMANDを殺すでしょう。

私はいくつかのbashスクリプトでこのコマンドを使用しました。どのプロセスが期限前に完全に完了したのか、(期限を超過したために)殺されたのか、どうすれば分かりますか?

答えて

1

ヌーtimeoutコマンドは、通常、124のステータスコードを返します。それ以外の場合は、コマンド自体から返されたステータスコードを返します。だから、すぐにtimeoutを実行した後$?の値をつかんでステータスコードをテストすることができます。

timeout 1.5s COMMAND 
status=$? 
if ((status==124)); then 
    # command timed out 
elif (status!=0)); then 
    # command terminated in time, but it returned an error status 
else 
    # command terminated in time and reported success 
fi 

ステータスコード124を返すことがありますあなたのコマンドでは、あなたは--preserve-statusオプションを使用してかどうかを確認しなければならない場合コマンドは、timeoutに送信するように指示した信号で終了しました。詳細については、man timeoutを参照してください。

0

COMMAND&& echo >> time_limit.txtを追加:COMMANDが殺されたかどうかを確認したいのであれば

timeout 1.5s COMMAND && echo >> time_limit.txt 

を、ファイルtime_limit.txtの存在を確認してください。そのファイルが存在する場合、コマンドが強制終了されなかったことを意味します。それ以外の場合は、コマンドが強制終了されました。 bashスクリプトで

、あなたは次のようにそのファイルの存在を確認することができます。タイムアウト時間を超過した場合

if [[ -r time_limit.txt ]]then; 
{ 
    echo "The command was NOT killed" 
} 
else 
{ 
    echo "The command was killed" 
} 
関連する問題