0

我正在尝试通过以下命令从 Ruby 运行一些计算密集型程序:

%x(heavy_program)

但是,我有时想限制程序的运行时间。所以我试着做

%x(ulimit -St #{max_time} & heavy_program)

但它似乎失败了;即使我在 Ruby 外部运行的 sh shell 中尝试,“&”技巧也不起作用。

我敢肯定有更好的方法来做到这一点......

4

1 回答 1

3

使用&&;

%x(ulimit -St #{max_time} && heavy_program)

%x(ulimit -St #{max_time}; heavy_program)

但是使用ulimit可能不是您真正需要的,请考虑以下代码:

require 'timeout'
Timeout(max_time){ %x'heavy_program' }

ulimit限制CPU 时间,并timeout限制总运行时间,因为我们人类通常会计算它。

因此,例如,如果您sleep 999999使用 - 运行 shell 命令,ulimit -St 5它不会运行 5 秒,而是运行所有 999999,因为sleep使用的CPU 时间可以忽略不计

于 2013-01-17T09:31:24.383 回答