SH:运行的ulimit和在同一行程序

问题描述:

我想通过下面的命令在Ruby中运行一些计算密集型程序:SH:运行的ulimit和在同一行程序

%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限制了总运行时间,因为我们人类通常会计算它。

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

+0

谢谢!你能否详细说明“&”,“&&”和“;”之间的区别在这种情况下? –

+2

'&'表示在后台运行指定的任务,并且它不可能从ruby的'%x'工作; 'cmdA && cmdB'表示“仅在cmdA成功时运行cmdB”; 'CMDA; cmdB'表示“首先运行cmdA,然后cmdB” –

+0

太好了,再次感谢! –