【问题标题】:Force kill subprocess with a very big shell script使用非常大的 shell 脚本强制终止子进程
【发布时间】: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


【解决方案1】:

建议以简单的bash 脚本开始调试您的代码。

bash-script.sh

#!/bin/bash

chmod +x command.sh; 
chmod +x command2.sh; 
./command.sh & 
./command2.sh

一旦您的脚本运行,请尝试使用 pkill 命令终止您的命令。

类似:

 pkill -9 -f "command.sh"

看看杀死它需要多长时间。

如果时间太长。从命令行运行 ./command.sh 并尝试使用上面的pkill 命令再次杀死它。如果还需要很长时间。

问题在于处理来自操作系统的 SIGKILL 信号的 command.sh 脚本,您应该研究使其能够捕获 SIGKILL 信号的 command.sh 命令行参数。

【讨论】:

  • 感谢您的回答。我已经尝试了带有陷阱 SIGKILL 信号的解决方案。所以我有 init.sh 包含 #!/bin/bash trap 'print TERM received;exit' 15 chmod +x command.sh; chmod +x command2.sh; ./command.sh & ./command2.sh 然后如果我 pkill 陷阱捕获信号并退出,但我得到 exitCode 1 并且失败:true,并且脚本在 1-2 之后再次被杀死,没有变化。
猜你喜欢
  • 2021-11-08
  • 2016-09-29
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 2011-12-10
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多