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

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

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

system("./solution");

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

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

Спасибо

Ответы [ 2 ]

11 голосов
/ 01 января 2011

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

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

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

4 голосов
/ 01 января 2011

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

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

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

...