如果需要超过5秒,如何退出使用Ruby的进程?

时间:2011-01-01 12:44:30

标签: ruby process execution-time

我正在Ruby中实现一个检查系统。它使用不同的测试运行可执行文件。如果解决方案不正确,可能需要永远完成某些硬测试。这就是我想将执行时间限制在5秒的原因。

我正在使用system()函数来运行可执行文件:

system("./solution");

.NET有一个很棒的WaitForExit()方法,那么Ruby呢?

有没有办法将外部进程的执行时间限制为5秒?

由于

2 个答案:

答案 0 :(得分:11)

您可以使用标准超时库,如下所示:

require 'timeout'
Timeout::timeout(5) { system("./solution") }

这样您就不必担心同步错误了。

答案 1 :(得分:4)

分叉你的孩子执行“./solution”,睡觉,检查它是否完成,如果没有杀死它。这应该可以帮到你。

pid = Process.fork{ system("./solution")}
sleep(5)
Process.kill("HUP", pid)

http://www.ruby-doc.org/core/classes/Process.html#M003153