ruby - 如何在 Ruby 中使子进程超时

标签 ruby timeout

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

cmd = "my unix command"
results = `#{cmd}`

如何为命令添加超时,以便在超过 x 秒时我可以假定它不工作?

最佳答案

Ruby 附带 Timeout module .

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 # ""

关于ruby - 如何在 Ruby 中使子进程超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903160/

相关文章:

ruby - 为 `class << self` 内的 eval 提供回溯的正确方法是什么?

ruby-on-rails - 使用 omniauth 的 google open_id 连接失败

amazon-s3 - 如何在 Django 存储中设置 AWS S3 对象永不过期?

c# - 等待 100 毫秒以获取方法返回的数据 else throw exception

ruby - 为 Rubocop 重构两层以上的 block 嵌套

ruby - 以最小的内存占用解析/读取大型 XML 文件

Ruby mongoid 聚合返回对象

Linux coreutils超时相对时间还是绝对时间?

android - 由于模拟器中的超时而无法安装

python - 如何跟踪 Python/Django/uwsgi/nginx 超时