如果父ruby脚本被终止,则由IO.popen自动启动Kill Process

时间:2013-04-09 15:44:52

标签: ruby io pipe popen

我正在尝试从windows中的ruby脚本运行ffmpeg。

def execute_ffmpeg(command)
  IO.popen(command){|io|
    io.each{|line|
      # Show Progress
    }
  }
end
command_ffmpeg = "ffmpeg -y -i input.avi -vb 1000k -ab 96k output.mp4 2>&1"
execute_ffmpeg(command_ffmpeg)

如果我等到编码完成,它工作正常。 但是如果我终止ruby脚本,ffmpeg的过程仍然是后台。

当父ruby进程终止时,如何终止ffmpeg进程?

我在Windows 7中使用ruby 1.9.3。

1 个答案:

答案 0 :(得分:0)

让子进程与父进程共享管道。让子进程中的一个线程调用IO.select就可以了。如果管道关闭,您就知道父进程已经死亡。有关实施,请参阅https://github.com/vaneyckt/Adeona/blob/master/lib/adeona.rb

编辑:刚刚注意到你在Windows 7上。不确定我的方法是否适用于Windows。