プログラムを運営しています。このプログラムは特定のコマンドを実行し、特定の時間を超えると、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
time
STDERRで印刷された出力をキャプチャするには、サブシェル(括弧)が必要です。代わりにtime foo 2> log
コマンドのSTDERRのみをリダイレクトするため、使用すると機能しません。foo
time
割り当てられた時間内にコマンドが完了した回数だけが必要な場合は、次のようにします。
ulimit -t 1800
for i in {1..10}; do
./bsolo3.0.17 test.opb && let count++
done
echo "Job finished in time $count times."