我在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
答案 0 :(得分:3)
是的,这是正常的。 exec()
以shell命令的形式执行命令,因此必须创建sh
进程。 shell然后分叉子进程来运行程序。
有些shell会在退出之前为最后一个命令重用自己的进程,但显然系统上的shell不会这样做。这个额外过程的开销通常可以忽略不计,所以这不是什么大问题。