Javascript 未为ctrl-C(Mac)调用NodeJS应用程序中的SIGINT处理程序
我的代码:Javascript 未为ctrl-C(Mac)调用NodeJS应用程序中的SIGINT处理程序,javascript,node.js,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。我立即返回到命令行。但是,conso
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时退出进程。(不输出“无中断退出”。)
尝试了()=>{
和函数(){
函数声明样式,结果相同
Mods,请不要太匆忙地将其标记为重复,当然,我很高兴被引用到一个有效的现有解决方案中。我看到了-响应ctrl+C的行为是不同的
// Begin reading from stdin so the process does not exit imidiately
process.stdin.resume();
process.on('SIGINT', function() {
console.log('Interrupted');
process.exit();
});
编辑:
//这里有一个大循环,需要几秒钟来执行
这是您的问题。NodeJS是单步执行的。当您执行同步循环时,会阻止事件循环,其他事件侦听器将无法同时工作
你可以:
您可以尝试
()=>
或函数(信号)
函数定义吗?我觉得我必须对类似的问题进行一些小的修改。是的,我尝试了这两种方法,但结果相同。感谢您的建议。将更新我的问题以表明我已经尝试过。预期的行为是否正确(没有“无中断退出”)与空函数一起出现?没有区别。我所做的ctrl+c编辑是由SO自动建议的,我认为它看起来很时髦。Re“预期行为是否与空函数一起出现?”是的,无论处理程序函数是空块还是包含上述处理代码,行为都是相同的。请尝试,谢谢。不会更改行为。注意,进程过早退出没有问题。可能这就是问题所在:所有平台都支持来自终端的SIGINT,并且通常可以使用+C生成(虽然这可能是可配置的)。启用终端原始模式时不会生成。让我修改上面的观察结果。通过添加stdin.resume()我可以看到一些新的情况发生。“中断”文本将显示,但只有在冗长的循环完成后才会显示。此时,需要按下一个键,然后我返回到命令行。因此,使用上述代码,处理程序将运行,但在按下ctrl+c后不会立即运行,并且ctrl+c不会停止进程。是的,这就是问题所在。很抱歉在回复之前等待了很长时间——我去度假了。我通过将工作构建为承诺链来解决问题——换句话说,按照您的建议,使循环异步。