Как выйти из процесса, запущенного с 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)