2013-04-09 2 views
3

J'essaie d'exécuter ffmpeg à partir du script ruby ​​dans windows.Kill Processus démarré par IO.popen automatiquement si le script ruby ​​parent est tué

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) 

Cela fonctionne très bien, si j'attends que l'encodage se termine. Mais si je termine le script ruby, le processus de ffmpeg reste en arrière-plan.

Comment est-ce que je peux tuer le processus de ffmpeg quand le processus parent de rubis est terminé?

J'utilise Ruby 1.9.3 dans Windows 7.

Répondre

0

Avoir le processus d'enfant part un tuyau avec le processus parent. Avoir un thread dans l'appel de processus enfant IO.select dessus. Si le tuyau se ferme, vous savez que le processus parent est mort. Voir https://github.com/vaneyckt/Adeona/blob/master/lib/adeona.rb pour la mise en œuvre. Edit: je viens de remarquer que vous êtes sur Windows 7. Je ne sais pas si mon approche fonctionne sur Windows.

+0

Merci pour votre réponse. Comme vous le mentionnez à cause de la fourche, je ne pouvais pas exécuter le code dans Windows. et j'ai lu votre code et manuel de référence encore et encore. Mais je ne pouvais pas le réécrire. Je vais vérifier à nouveau après avoir appris les bases de l'E/S. – Tetsu

Questions connexes