首页 > 解决方案 > Exec() 为FFMPEG创建两个不同的进程

问题描述

我在其中运行此命令,exec ()它会创建两个 FFMPEG 进程,其中一个进程与另一个进程同时存在,但PID. 这种行为正常吗?当我直接在中运行代码时,shell不会发生这种情况。

$ffmpeg = "/home/user/bin/ffmpeg -hide_banner -loglevel verbose -n -i https://sitelink/list.m3u8 -map 0:4 -map 0:5 -acodec copy -bsf:a aac_adtstoasc -vcodec copy video.mp4 1> log.txt  2>&1";

    exec($ffmpeg, $output, $var);

创建的两个进程的示例

user+ 24414 24413  0 13:42 pts/2    00:00:00 sh -c /home/user/bin/ffmpeg -hide_banner -loglevel verbose -n -i https://sitelink/list.m3u8 -map 0:4 -map 0:5 -acodec copy -bsf:a aac_adtstoasc -vcodec copy video.mp4 1> log.txt  2>&1
user+ 24415 24414  1 13:42 pts/2    00:00:00 /home/user/bin/ffmpeg -hide_banner -loglevel verbose -n -i https://sitelink/list.m3u8 -map 0:4 -map 0:5 -acodec copy -bsf:a aac_adtstoasc -vcodec copy video.mp4

标签: phpshellffmpeg

解决方案


是的,这很正常。exec()将命令作为shell命令执行,因此它必须创建一个sh进程。然后 shell 派生一个子进程来运行程序。

一些 shell 会在退出前为最后一个命令重用自己的进程,但显然系统上的 shell 不会这样做。该额外过程的开销通常可以忽略不计,因此没什么大不了的。


推荐阅读