6

我正在用 Ruby 实现一个检查系统。它运行具有不同测试的可执行文件。如果解决方案不正确,则可能需要很长时间才能完成某些严格的测试。这就是为什么我想将执行时间限制为 5 秒。

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

system("./solution");

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

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

谢谢

4

2 回答 2

13

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

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

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

于 2011-01-01T14:04:06.373 回答
4

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

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

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

于 2011-01-01T12:48:17.940 回答