2013-01-17 5 views
0

나는 다음과 같은 명령을 통해 루비에서 약간의 계산 집약적 인 프로그램을 실행하려고 : 가끔 실행 시간을 제한 할, 그러나루비를 통해 SH : 실행 ulimit를 같은 줄에 프로그램

%x(heavy_program) 

프로그램의 그래서 내가 했어

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

그러나 그것은 실패한 것 같다; "&"트릭은 루비 밖에서 실행중인 sh 쉘에서 시도해도 작동하지 않습니다. 나는이 일을 더 나은 방법이있을거야

...

답변

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 쉘 명령을 실행하면 - 그것은 5 초 동안하지 실행되지만 모든 999999에 대한 sleep 때문에 CPU 시간의

+0

감사를 무시할 금액을 사용합니다! "&", "&&"및 ";"의 차이점에 대해 자세히 설명해 주시겠습니까? 이 맥락에서? –

+2

'&'는 백그라운드에서 지정된 작업을 실행한다는 의미이며 루비의'% x'에서 작동하지 않을 것입니다; 'cmdA && cmdB'는 "cmdA가 성공하면 cmddB 만 실행"을 의미합니다. 'cmdA; cmdB'는 "cmdA를 먼저 실행 한 다음 cmdB"을 의미합니다. –

+0

다시 한번 감사드립니다! –