2013-01-17 58 views
0

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

%x(heavy_program) 

不過,我有時想限制運行時間的程序。所以我試着做

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

但是它似乎失敗了;即使當我在Ruby之外的正在運行的sh shell中嘗試時,「&」技巧也不起作用。

我敢肯定有這樣做的更好的辦法...

回答

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限制了總運行時間,因爲我們人類通常會計算它。

因此,舉例來說,如果您運行ulimit -St 5sleep 999999 shell命令 - 它不會運行5秒鐘,但對於所有的999999因爲sleep使用的CPU時間可以忽略不計

+0

謝謝!你能否詳細說明「&」,「&&」和「;」之間的區別在這種情況下? –

+2

'&'表示在後臺運行指定的任務,並且它不可能從ruby的'%x'工作; 'cmdA && cmdB'表示「僅在cmdA成功時運行cmdB」; 'CMDA; cmdB'表示「首先運行cmdA,然後cmdB」 –

+0

太好了,再次感謝! –