我正在运行一个程序。在这个程序中,我运行一个特定的命令,如果超过一定时间,我使用 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
需要子 shell(括号)才能捕获time
打印到 STDERR 的输出。使用time foo 2> log
将不起作用,因为这只会重定向命令的 STDERRfoo
而不是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."