当Node.js进程可以直接退出()而不触发其他信号事件(uncaughtException,SIGINT,SIGTERM …)

我使用REDIS数据存储来处理应用程序。 为了保持数据的完整性,我想在stream程closures时清理商店。

我创build了一个函数处理程序,并绑定它(用process.on())来发信号事件:uncaughtException,SIGINT,SIGTERM,SIGQUIT,它工作正常(CTRL + C,进程查杀,exception,…)。

但是我已经读过,在某些情况下,过程可以直接退出而不触发其他信号事件。

在这种情况下,问题在于process.on('exit')处理程序只能处理同步任务。

我做了不同的testing,试图以不同的方式杀死这个过程。 而且(除了在Windows上使用SIGTERM),我无法确定process.on('exit')是否直接触发而没有SIGINT,SIGTERM或其他事件触发的情况。

所以我的问题是(在Linux系统上),在什么情况下进程可以直接退出而不会触发这个事件: http : //nodejs.org/api/all.html#all_signal_events ?

截至目前,阅读文档并做一些重新 search ,似乎有一个node.js应用程序退出只有四种方式:

  • process.exit() ,由process.on('exit')
  • 接收可由process.on('signal_name')处理的* nix信号
  • 有一个exception返回到事件循环,由process.on('UncaughtException')
  • 计算机被拔出,销毁,node.js二进制文件被烧毁,或者SIGKILL / kill -9,并且没有处理。

通常会发生某人不理解来自uncaughtException的错误消息,并错误地认为这是“别的东西”,导致node.js死亡。

确实。 我只是想指出Node程序可以在没有执行处理程序(如果没有注册)的情况下由于信号而退出。 重读您的文章,我看到这可能是你的意思。