[英]process.exit hook infinite loop?
這是用於退出 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
調用是否會導致無限調用堆棧出現任何問題?
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 在此之后執行任何有形的操作,並且應用程序將停止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.