В ожидании выхода рубинового детского пида

Я пытаюсь разветвить подпроцесс, дождаться его завершения, если он не завершится в течение определенного времени, убить его.

Это то, что я до сих пор:

servers.each do |server|
    pid = fork do
        puts "Forking #{server}."
        output = "doing stuff here"
        puts output
    end

    Process.wait
    puts "#{server} child exited, pid = #{pid}"
end

Где-то после / вокруг Process.wait мне бы хотелось, чтобы какая-то утилита ждала 20 секунд, и если процесс все еще там, я бы хотел убить его и пометить вывод как «ОШИБКА».

Я новичок в fork / exec. Мой код на самом деле работает, но я просто не знаю, как подойти к этому аспекту ожидания / убийства.

Ответы на вопрос(2)

Ваш ответ на вопрос