2013-11-25 99 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的孩子。