Как выйти из процесса, запущенного с Ruby, если это займет более 5 секунд?

Я внедряю систему проверки в Ruby. Он запускает исполняемые файлы с различными тестами. Если решение не является правильным, может потребоваться вечность, чтобы закончить его с некоторыми сложными тестами. Вот почему я хочу ограничить время выполнения 5 секундами.

Я использую функцию system() для запуска исполняемых файлов:

system("./solution");

.NET имеет отличный WaitForExit() метод, как насчет Руби?

Есть ли способ ограничить время выполнения внешнего процесса 5 секундами?

Спасибо

2 ответа

Решение

Вы можете использовать стандартную библиотеку времени ожидания, вот так:

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

Таким образом, вам не придется беспокоиться об ошибках синхронизации.

Раздави своего ребенка, который выполняет "./solution", спи, проверь, выполнено ли это, если не убей его. Это должно начать вас.

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

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

Другие вопросы по тегам