簡體   English   中英

process.exit 鈎子無限循環?

[英]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的標志。 因此,如果設置了標志,則將不再發出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 在此之后執行任何有形的操作,並且應用程序將停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM