Exec()为FFMPEG创建两个不同的进程

I run this command in exec () and it creates two FFMPEG processes one at the same time as the other but with different PID. Is this behavior normal? When I run the code directly in the shell this does not happen.

$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);

Example of the two processes created

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

Yes, it's normal. exec() executes the command as a shell command, so it has to create a sh process. The shell then forks a child process to run the program.

Some shells will reuse their own process for the last command before exiting, but apparently the shell on your system doesn't do this. The overhead of that extra process is generally negligible, so it's not a big deal.