process.exit hook无限循环?

时间:2015-12-01 02:44:23

标签: javascript node.js

这是退出Node.js进程的本机出口挂钩:

process.on('exit', function () { // listen to exit event

});

这个钩子将通过调用

直接调用
process.exit();  // probably does some magic to remove calls from queue somehow, somewhere in the Node.js process

但是,我在网上看到了一些推荐这样做的代码:

process.on('exit', function () {
  if (condition) {
    process.exit(1); // will this invoke the same exit event?
  } else {
    process.exit(0); // will this invoke the same exit event?
  }
});

我的问题是,钩子内的process.exit调用是否会导致无限调用堆栈的任何问题?

2 个答案:

答案 0 :(得分:2)

process.exit有一个名为process._exiting的标记。因此,如果设置了标记,则不会再发出process的{​​{1}}事件。

这就是process.exit的样子,从Node.js v5.1.0开始,

exit

如果你想乱搞,那就试试吧

process.exit = function(code) {
  if (code || code === 0)
    process.exitCode = code;

  if (!process._exiting) {
    process._exiting = true;
    process.emit('exit', process.exitCode || 0);
  }
  process.reallyExit(process.exitCode || 0);
};

答案 1 :(得分:0)

当您调用process.exit()(并可选择传入退出代码)时,会导致处理停止。将触发exit事件,这是任何代码运行的最后机会,并且事件循环已停止。此后不久,Node.js实际上完全停止并返回指定的退出代码。因此,process.exit()阻止Node.js在该点之后做任何有形的事情并且应用程序停止。