我正在尝试创建一个执行进程的函数,并在2秒后终止它:
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
我使用短时间运行的进程和长时间运行的进程(使用“sleep”调用)测试了此函数。该命令始终完成。我需要使用rlimit_cpu在2秒后使用spawn调用杀死“命令”。我怎么能这样做?
编辑:看起来像rlimit_cpu不能像我想的那样工作。根据{{3}}:CPU限制是CPU秒数的限制而不是经过的时间
此外:
当您执行fib调用时,您将锤击CPU以使经过的时间和CPU时间关闭(大部分处理时间都花在使用CPU上)。打印时并非如此,因为大部分时间都花在I / O上。
我将使用另一种方法,因为无论进程是CPU绑定还是IO绑定,我都需要终止进程
答案 0 :(得分:0)
要在两秒钟后终止该过程,请运行一个计时器两秒钟,然后尝试呼叫该孩子的Process.kill
。