我正在尝试通过以下命令从 Ruby 运行一些计算密集型程序:
%x(heavy_program)
但是,我有时想限制程序的运行时间。所以我试着做
%x(ulimit -St #{max_time} & heavy_program)
但它似乎失败了;即使我在 Ruby 外部运行的 sh shell 中尝试,“&”技巧也不起作用。
我敢肯定有更好的方法来做到这一点......
使用&&
或;
:
%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 时间可以忽略不计