Waiting for Ruby child pid to exit

前端 未结 2 545
小蘑菇
小蘑菇 2021-02-15 11:31

I\'m trying to fork a sub-process, wait for it to finish, if it doesn\'t finish within a certain amount of time, kill it.

This is what I have so far:

ser         


        
2条回答
  •  孤城傲影
    2021-02-15 11:55

    Use the Timeout module: (code from http://www.whatastruggle.com/timeout-a-subprocess-in-ruby)

    require 'timeout'
    
    servers.each do |server|
        pid = fork do
            puts "Forking #{server}."
            output = "doing stuff here"
            puts output
        end
    
        begin
            Timeout.timeout(20) do
                Process.wait
            end
        rescue Timeout::Error
            Process.kill 9, pid
            # collect status so it doesn't stick around as zombie process
            Process.wait pid
        end
        puts "#{server} child exited, pid = #{pid}"
    end
    

提交回复
热议问题