NodeJS:无法杀死 gulp 进程的生成

NodeJS: Can't kill spawn of gulp process

我想在某些更改上重新启动 gulp。这可以通过将以下内容放在 gulpfile

中轻松完成
spawn('gulp', [], { stdio: 'inherit'});

但是,一旦 gulp 以这种方式重新启动,进程将不再通过终端使用 Ctrl+C 正确终止。如果我通过终端启动 gulp,我可以捕获 Ctrl+C 信号,但如果 gulp 是通过 spawn 启动的,则不能gulpfile。我怎样才能捕获 'SIGINT' 生成点?

好的,这里是所有可能遇到此问题的人的完整故事。根据我一直在阅读的内容,每当您想从 gulp 中重新启动 gulp 时,您只需使用:

spawn('gulp', [], { stdio: 'inherit'});
process.exit();

我没有在问题中提到process.exit(),因为我没想到它会影响Ctrl+C的使用。的确如此,因为我的服务器是 ExpressJS 的,每当我在 gulp 从自身内部重新启动后使用 Ctrl+C 时,我都会得到端口仍在使用错误(Error: listen EADDRINUSE)。显然,所有节点进程都没有关闭。从我的代码中删除行 process.exit() 后,我就可以使用 Ctrl+C 并成功关闭所有进程。下面是 gulp 文件中与此问题相关的有用代码和终端输出。

// gulpfile.js
gulp.task('restart', function() {
  server.close();
  spawn('gulp', [], { stdio: 'inherit'});
  process.exit(); // this line needs to be removed
});

process.on('SIGINT', function() {
  setTimeout(function() {
    gutil.log(gutil.colors.red('Successfully closed ' + process.pid));
    process.exit(1);
  }, 500);
});

// Console results:
^C[20:12:12] Successfully closed 67160
[20:12:12] Successfully closed 67151