NodeJS应用程序中的SIGINT处理程序未调用ctrl-C(Mac)

时间:2018-03-23 20:06:29

标签: javascript node.js

我的代码:

process.on('SIGINT', function() {
  console.log('Interrupted');
  process.exit();
});

// A big loop here that takes several seconds to execute through.

console.log('Exited without interruption');

我从命令行运行程序,当它仍在运行时,按 ctrl + C 。我立即返回命令行。但是,console.log('Interrupted')不会显示在输出中。经过一段时间后,显示console.log('Exited without interruption'),证明当我点击 ctrl + C 时进程没有退出,而是继续在后台运行我被送回了命令行。

删除process.on()语句允许进程在按下 ctrl + C 时退出。 (否#39;不中断退出'输出。)

尝试了同样结果的() => {function() {函数声明样式。

Mods,请不要太匆忙将此标记为副本,尽管当然,我很高兴被引用到现有的解决方案中。我已经看过Can't stop local node server with Ctrl + C (Mac) - 响应 ctrl + C 的行为是不同的。

1 个答案:

答案 0 :(得分:1)

// Begin reading from stdin so the process does not exit imidiately
process.stdin.resume();
process.on('SIGINT', function() {
  console.log('Interrupted');
  process.exit();
});

https://nodejs.org/api/process.html#process_signal_events

编辑:

  

//这里需要几秒钟才能执行。

这是你的问题。 NodeJS是单踏板。当您执行同步循环时,您会阻止事件循环,而其他事件侦听器无法同时工作。

你可以:

  1. 使循环异步(使用process.nextTick()的递归函数)
  2. 为循环作业生成子进程(worker),然后不会阻止主事件循环