我需要一个解决方案,如何在ruby中终止系统调用并继续执行此操作需要花费太多时间。如果超时,我想设置一个模拟。 ruby中的超时方法没有帮助,因为它会引发错误而不是移动到代码的末尾。
Timeout::timeout(5) {
a = `sleep 30; echo 1`
}
puts a
答案 0 :(得分:0)
不确定这是否说明了它,但是例如2个ruby文件:
#slow_proceess.rb
puts 'starting.... waiting...'
10.times do
puts "slow process runing..."
sleep 1
end
puts 'done exiting'
#fast.rb
pid = Process.spawn('ruby slow_process.rb')
# after x seconds we can kill the process with
`kill -9 #{pid}`
或者在您的示例中使用实例变量在块外部访问它并且还有救援错误(感谢@tadman):
begin
Timeout::timeout(5) {
@pid = Process.spawn('sleep 30; echo 1')
}
rescue Timeout::Error
puts "#{@pid} process has timed out"
end
# do stuff