php - 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
解决方案
是的,这很正常。exec()
将命令作为shell命令执行,因此它必须创建一个sh
进程。然后 shell 派生一个子进程来运行程序。
一些 shell 会在退出前为最后一个命令重用自己的进程,但显然系统上的 shell 不会这样做。该额外过程的开销通常可以忽略不计,因此没什么大不了的。
推荐阅读
- ios - Ream Swift 迁移崩溃仅在设备上
- ruby - Codeacademy - 电影之夜(红宝石)。使用户能够在不区分大小写的情况下查找电影
- amqp - @RabittListener 忽略 routingKey
- frama-c - WP 插件可以处理联合和类型双关语吗?
- sql - 如何对 SQL Server 使用 count() 或 Row_number()
- docker - docker swarm deploy 上的 Prisma 配置错误
- c# - 如何添加到 RavenDB 列表
在.net - angular - Angular 7,反应形式,如何将日期格式化为“YYYY-MM-DD”?
- javascript - 将元素保持在铁页之外
- r - Optimization problem - minimizing a function in R