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
我想在某些更改上重新启动 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