终止 ffmpeg 进程问题

2020-03-25 10:57:50 +08:00
 fenghuang

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

5616 次点击
所在节点    FFmpeg
11 条回复
ClericPy
2020-03-25 11:10:05 +08:00
没什么代码么, 直接听起来像是 kill 以后父进程没 wait 导致了僵尸进程, 进程标记有写它现在的状态和父进程吗
Sasasu
2020-03-25 11:12:19 +08:00
进程处于 zombie 状态
fenghuang
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
2020-03-25 11:30:55 +08:00
@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
2020-03-25 11:42:29 +08:00
往里面写一个 b‘q’ 就可以退出.
fenghuang
2020-03-25 12:00:02 +08:00
@MoYi123 #5 往哪里面写
fenghuang
2020-03-25 12:05:02 +08:00
@nightwitch #4 我试一下 非常感谢
MoYi123
2020-03-25 12:45:52 +08:00
Popen.communicate(input=b'q'),可以先在 shell 里试一下运行 ffmpeg xxx 后按 q 能不能退出
Kobayashi
2020-03-25 20:40:49 +08:00
难道没有人注意到 subprocess 有超时参数可以传吗?
fenghuang
2020-03-30 19:08:51 +08:00
@MoYi123 #8 好的,我试试,谢谢
fenghuang
2020-03-30 19:10:52 +08:00
发现变成[ffmpeg]的原因了 ffmepg 进程自己卡死了,这时候什么命令都无法终止了,只能结束 python 主进程才行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/655961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX