process.exit钩子无限循环?

这是用于退出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 

不过,我在网上看到了一些代码,build议这样做:

 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调用是否会导致无限调用堆栈的任何问题?

process.exit有一个名为process._exiting的标志。 所以,如果标志被设置,那么processexit事件将不会再被释放。

这就是process.exit样子,就像Node.js v5.1.0一样,

 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); }; 

如果你喜欢乱七八糟,那就试试这个

 var counter = 0; process.on('exit', function (val) { console.log("Counter", counter++); if (counter === 2) { console.log("Really exiting now"); // change this to `false` if you want to see infinite loop :D process._exiting = true; } else { process._exiting = false; } process.exit(0); }); 

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