如何在 node.js 中杀死生成的进程

Posted

技术标签:

【中文标题】如何在 node.js 中杀死生成的进程【英文标题】:How to kill spawned process in node.js 【发布时间】:2017-07-28 11:50:33 【问题描述】:

我有一个函数需要在生成一个新进程之前杀死以前的 ffmpeg 进程,但是我不确定如何执行此操作,因为如果我尝试下面的代码,我会得到 ffmpeg 未定义是可以理解的:

var ffmpeg_started = false;
function start_ffmpeg(file) 
  if (ffmpeg_started)
    ffmpeg.kill();
  var command =  [
               '-i', file,
               '-f', 'mpegts',
               '-codec:v', 'mpeg1video',
               'http://server.com/'
                ];
  
  const ffmpeg = spawn('ffmpeg', command);  
  ffmpeg_started = true;

【问题讨论】:

【参考方案1】:

一个简单/简单的解决方案是将ffmpeg 声明移动到父作用域中。然后你可以取消布尔标志,只检查ffmpeg 的值来判断它是否仍在运行。例如:

var ffmpeg;
function start_ffmpeg(file) 
  if (ffmpeg)
    ffmpeg.kill();
  ffmpeg = spawn('ffmpeg', ...);

如果你需要比这更复杂的东西,你可以考虑使用队列或类似的东西来更优雅地处理 ffmpeg 的调用。

【讨论】:

ffmpeg 需要是一个常量,所以这给了我一个错误,因为我无法对常量进行赋值。 为什么它需要是一个常数? 它似乎可以使用 var 而不是 const - 我不确定为什么所有示例都使用 const。但到目前为止,它已经奏效了。我也会考虑使用队列,谢谢。

以上是关于如何在 node.js 中杀死生成的进程的主要内容,如果未能解决你的问题,请参考以下文章

如果脚本被杀死,node.js 生成的进程仍然存在

Node.js 进程在 aws 实例上被杀死

如何杀死 pm2 --no-daemon 进程

如何使用 C 在 Linux 上以编程方式杀死进程树

如何在nodejs中创建线程

如何关闭 node.js 中子进程的 stdio 管道?