特定の時間内にプロセスが終了したことを確認する

特定の時間内にプロセスが終了したことを確認する

プログラムを運営しています。このプログラムは特定のコマンドを実行し、特定の時間を超えると、ulimitコマンドを使用してコマンドの実行を終了します。より明確にするために、次のコマンドを実行します。

ulimit -t 1800 ./bsolo3.0.17 test.opb

これは、1800秒より長くかかる場合はbsoloソルバーを終了したいという意味です。

私が望むのは、コマンドを10回実行した後、その制限未満でコマンドが実行された回数と、その制限を超えてコマンドが実行された回数を知る方法です。まだ全然わかりません。どのようなヒントがありますか?

答え1

少なくとも私のシステム(Debian)ではそうではありませんulimit。制限の後、コマンドは実行されません。制限を設定したら、コマンドを実行します。

$ ulimit -t 1800 
$ ./bsolo3.0.17 test.opb

とにかく、利用可能な時間を得るためにtime:

$ time ls > /dev/null
real    0m0.004s
user    0m0.000s
sys     0m0.000s

したがって、コマンドが一種のループで実行されている場合は、次のようにファイルに時間をキャプチャできます。

ulimit -t 1800
for i in {1..10}; do
  (time ./bsolo3.0.17 test.opb) 2>> times.log 
done  

timeSTDERRで印刷された出力をキャプチャするには、サブシェル(括弧)が必要です。代わりにtime foo 2> logコマンドのSTDERRのみをリダイレクトするため、使用すると機能しません。footime

割り当てられた時間内にコマンドが完了した回数だけが必要な場合は、次のようにします。

 ulimit -t 1800
for i in {1..10}; do
  ./bsolo3.0.17 test.opb && let count++
done  
echo "Job finished in time $count times."

関連情報