我试图通过以下命令从Ruby运行一些计算密集型程序:
%x(heavy_program)
但是,我有时想限制程序的运行时间。所以我试着做了
%x(ulimit -St #{max_time} & heavy_program)
但似乎失败了; “&”即使我在Ruby之外运行的sh shell中尝试它,技巧也不起作用。
我确信有更好的方法可以做到这一点......
答案 0 :(得分: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
运行ulimit -St 5
shell命令 - 它将运行不会持续5秒,但对于所有999999,因为sleep
使用的数量可以忽略不计 CPU时间