2013-11-25 40 views
0

我試圖創建將執行過程,並在2秒後會殺死它的功能:RLIMIT_CPU不工作的產卵呼叫

def execute(command, input_file, output_file) 
    pid = Kernel.spawn(command,{ 
      STDIN => input_file, 
      STDOUT => output_file, 
      :rlimit_cpu => [2,2], #2 secs, 
      :rlimit_nproc => 0, 
      :rlimit_as => 16 * 1024 * 1024 
      } 
    ); 
    Process.wait(pid) 
    puts "exit status = " + $?.exitstatus.to_s 
    return File.read(output_file) 
end 

我測試了短時間運行流程和長時間運行的流程這一功能(帶有「睡眠」呼叫)。該命令總是完成。我需要的是重生的呼叫使用RLIMIT_CPU 2秒後殺死了「命令」。我該怎麼做?

編輯:好像RLIMIT_CPU不工作,因爲我以爲。據this question

CPU限制是在CPU秒的限制,而不是過去的時間

另外:

當你做對FIB電話,你捶了CPU使經過並且CPU時間接近(大部分處理時間用於使用CPU)。因爲大部分時間都花在I/O上,所以打印時並非如此。

我將使用另一種方法,因爲我需要殺死過程無論過程是否CPU綁定或IO結合

回答

0

要兩秒後殺死的過程中,運行一個計時器兩秒鐘,然後嘗試調用Process.kill的孩子。