如何在Ruby中超时子进程

Jos*_*osh 4 ruby timeout

我想测试一个进程是否正常运行所以我运行:

cmd = "my unix command"
results = `#{cmd}`
Run Code Online (Sandbox Code Playgroud)

如何为命令添加超时,以便如果超过x秒,我可以认为它不起作用?

ste*_*lag 7

Ruby发布了Timeout模块.

require 'timeout'
res = ""
status = Timeout::timeout(5) {res = `#{cmd}`} rescue Timeout::Error

# a bit of experimenting:

res = nil
status = Timeout::timeout(1) {res = `sleep 2`} rescue Timeout::Error 
p res    # nil
p status # Timeout::Error

res = nil
status = Timeout::timeout(3) {res = `sleep 2`} rescue Timeout::Error 
p res    # ""
p status # ""
Run Code Online (Sandbox Code Playgroud)