2013-04-09 87 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