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
的标志。 所以,如果标志被设置,那么process
的exit
事件将不会再被释放。
这就是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在这个点之后做了任何有形的事情,并且应用程序停止了。