2013-04-09 81 views
3

我试图从Windows中的ruby脚本运行ffmpeg。如果父母ruby脚本被杀死,自动启动IO.popen

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) 

它工作正常,如果我等到编码完成。 但是,如果我终止红宝石脚本,ffmpeg的过程仍然是背景。

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

我使用Ruby 1.9.3在Windows 7

回答

0

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

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

+0

感谢您的回复。正如你所提到的,因为我不能在Windows中运行代码。我一次又一次地阅读你的代码和参考手册。但我无法改写它。在了解IO基础知识后,我会再次检查它。 – Tetsu 2013-04-15 03:08:31