[英]How to effectively kill a frozen subprocess in Python?
我正在處理一個比較奇怪的問題。
我已經為ffmpeg的舊版本編寫了Python包裝器(在Python 2.6.6中)。 問題是,給定一個非常特殊的視頻, ffmpeg
停止正常工作(笨拙的輸出,完整的cpu使用率,沒有結束階段等),並且將python解釋器與之配合使用。
現在,如果我直接從終端運行ffmpeg
並使用編碼選項,並將有問題的視頻作為輸入, ffmpeg
不會立即響應Ctrl-c
。 我必須等待10秒鍾或更長時間,然后它退出並提示我。 但是,如果我改用“健康”視頻,它將僅打印“ Received signal 2: terminating.
並優雅地退出。
在python包裝器中,我使用p.kill()
無效。 行為完全相同,也就是我必須等待10秒才能退出程序。 當ffmpeg
出現問題視頻時,如何立即停止播放?
請注意,如果執行兩次Ctrl-c
無論如何我都會立即得到提示。
您如何執行FFmpeg子進程? 有很多方法可以啟動和監視Python中的進程。
我曾經處理這個確切的問題,因為我曾經為FFmpeg項目運行連續的自動化測試。 當我需要調試時,我將打印出程序認為與正在運行的FFmpeg進程相對應的PID。 然后,我將使用top
或ps
來驗證PID是否正確。 Linux和Mac OS X之間存在一些奇怪的問題,這些問題涉及傳遞給Python函數的外殼參數以及PID是否與FFmpeg進程或啟動FFmpeg進程的外殼相關。
另請參閱: 我寫的這篇老博客文章探討了這個問題以及眾多的答復 。
如果您使用的是Linux,則可以通過以下方式將其留在shell中:
subprocess.call( "kill -9 $(pidof ffmpeg)", shell=True )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.