V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fenghuang
V2EX  ›  FFmpeg

终止 ffmpeg 进程问题

  •  
  •   fenghuang · 2020-03-25 10:57:50 +08:00 · 5787 次点击
    这是一个创建于 1723 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在用 python 调用 ffmpeg 拉取网络流,有时候执行 kill -9 ffmpeg_pid 可以正常终止 ffmpeg 进程,但是有时候执行后 ffmpeg 进程就变成 [ffmpeg], 然后就无法 kill 了,python 进程也在阻塞状态,只能终止 python 进程,这个 [ffmpeg] 进程也退出了,这是什么情况?

    11 条回复    2020-03-30 19:10:52 +08:00
    ClericPy
        1
    ClericPy  
       2020-03-25 11:10:05 +08:00
    没什么代码么, 直接听起来像是 kill 以后父进程没 wait 导致了僵尸进程, 进程标记有写它现在的状态和父进程吗
    Sasasu
        2
    Sasasu  
       2020-03-25 11:12:19 +08:00
    进程处于 zombie 状态
    fenghuang
        3
    fenghuang  
    OP
       2020-03-25 11:16:42 +08:00
    @ClericPy #1 上代码
    ```python
    cmd = 'ffmpeg ...'
    r = subprocess.Popen(shlex.split(cmd), stderr=subprocess.PIPE)
    time.sleep(3600)
    subprocess.run("kill -9 {pid}".format(pid=r.pid), shell=True)
    ```
    nightwitch
        4
    nightwitch  
       2020-03-25 11:30:55 +08:00   ❤️ 1
    @fenghuang ffmpeg 进程被你的 Python 进程拉起,父进程是 Python,你要在 Python 里面给它收尸体才不会变成僵尸进程。平时我们可以用 kill 杀进程是因为进程的父进程 init 会自动收尸。
    正确代码
    ```
    cmd = 'ffmpeg ...'
    r = subprocess.Popen(shlex.split(cmd), stderr=subprocess.PIPE)
    time.sleep(3600)
    r.terminate() #要求子进程结束
    r.wait() #给子进程收尸
    ```
    MoYi123
        5
    MoYi123  
       2020-03-25 11:42:29 +08:00
    往里面写一个 b‘q’ 就可以退出.
    fenghuang
        6
    fenghuang  
    OP
       2020-03-25 12:00:02 +08:00
    @MoYi123 #5 往哪里面写
    fenghuang
        7
    fenghuang  
    OP
       2020-03-25 12:05:02 +08:00
    @nightwitch #4 我试一下 非常感谢
    MoYi123
        8
    MoYi123  
       2020-03-25 12:45:52 +08:00
    Popen.communicate(input=b'q'),可以先在 shell 里试一下运行 ffmpeg xxx 后按 q 能不能退出
    Kobayashi
        9
    Kobayashi  
       2020-03-25 20:40:49 +08:00 via Android
    难道没有人注意到 subprocess 有超时参数可以传吗?
    fenghuang
        10
    fenghuang  
    OP
       2020-03-30 19:08:51 +08:00
    @MoYi123 #8 好的,我试试,谢谢
    fenghuang
        11
    fenghuang  
    OP
       2020-03-30 19:10:52 +08:00
    发现变成[ffmpeg]的原因了 ffmepg 进程自己卡死了,这时候什么命令都无法终止了,只能结束 python 主进程才行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4544 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:40 · PVG 13:40 · LAX 21:40 · JFK 00:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.