【发布时间】:2022-01-19 16:18:19
【问题描述】:
我有一个 80.000 个字符的大 ffmpeg shell 脚本和另一个较小的。
我正在使用 execa 执行它,我得到了一个 PID。
execa(`chmod +x command.sh; chmod +x command2.sh; ./command.sh & ./command2.sh`, {shell: true, detached: true}
离开选项卡后,我将在该子进程上执行exec(kill -9 ${pid})。杀死它大约需要 3-4 分钟。我该如何优化呢?我可以立即杀死它吗?在它尝试关闭的 3-4 分钟时间内,它会占用大量 CPU 资源。
后续信息
所以我有 2 个 shell 脚本。
一个用于音频流,一个用于视频流。
我正在使用 & 同时执行它们,因为我在播放视频时同时需要音频和视频。
audioStream.sh 只是一个输出 hls 音频块的 ffmpeg 命令。
videoStream.sh 包含 400 个 ImageMagick 命令,用于转换带边框的图像,以及 85 个 ffmpeg 命令,用于输出视频 hls 块,这些块进入到视频播放器的 m3u8 主播放列表中。命令用';'分隔。
【问题讨论】:
-
你的问题不够清楚。在不知道脚本做什么的情况下,很难猜测发生了什么。您是否有意在后台运行
./command.sh而在前台运行./command2.sh?请edit您的问题提供更多详细信息。通常你不应该使用kill -9而是使用kill ${pid}让进程有机会在终止之前进行清理。kill -9只能在无法通过其他方式停止程序的情况下作为最后的手段使用。当您以这种方式终止 shell 进程时,您的脚本会发生什么,这有点不清楚。 -
@Bodo 谢谢你的回答。所以我有2个shell脚本。一种用于音频流,一种用于视频流。我正在使用 & 同时执行它们,因为在播放视频时我同时需要音频和视频。 audioStream.sh 只是一个输出 hls 音频块的 ffmpeg 命令。 videoStream.sh 包含 400 个 ImageMagick 命令,用于转换带边框的图像和 85 个 ffmpeg 命令,用于输出视频 hls 块,这些块进入到视频播放器的 m3u8 主播放列表中。命令用';'分隔。
-
请不要使用 cmets 添加信息。 Edit 你的问题。 你的概念看起来很奇怪。如果您有一个音频进程和一个视频进程独立运行,您将不会有任何同步。我怀疑这是否适用于同时播放生成的视频。如果音频数据已准备好播放某个时间点而视频数据尚未准备好,会发生什么情况。我建议显示具有减少命令数量的示例脚本。而不是 400 + 85 个命令显示例如5个。请添加有关您的用例的更多详细信息。
标签: node.js unix subprocess