如果超时,请在ruby中杀死linux命令

时间:2018-03-22 18:56:37

标签: ruby

我需要一个解决方案,如何在ruby中终止系统调用并继续执行此操作需要花费太多时间。如果超时,我想设置一个模拟。 ruby中的超时方法没有帮助,因为它会引发错误而不是移动到代码的末尾。

    Timeout::timeout(5) {
      a = `sleep 30; echo 1`
    }

puts a

1 个答案:

答案 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