首頁  >  文章  >  web前端  >  淺談NodeJS取得程式退出碼的方法

淺談NodeJS取得程式退出碼的方法

青灯夜游
青灯夜游轉載
2021-09-28 10:39:441611瀏覽

如何取得 NodeJS 程式退出碼?以下這篇文章跟大家介紹一下取得 Node.js 程式退出碼的方法以及退出碼枚舉,希望對大家有幫助!

淺談NodeJS取得程式退出碼的方法

想要退出正在執行的NodeJS 程序,我們既可以透過Ctrl C  的方式,也可以透過 process.exit() 來執行退出。 【推薦學習:《nodejs 教程》】

這兩個操作都會強制進程盡快退出,即使仍有未完全完成的非同步操作掛起,包括對process .stdoutprocess.stderr 的I/O 操作。

如果由於錯誤情況需要終止Node.js 進程,則拋出未捕獲的錯誤並允許進程相應地終止比調用process.exit() 更安全,例如:

import process from 'process';

// 如何正确设置退出码,同时让进程正常退出。
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exitCode = 1;
}

Worker 線程中,該函數停止當前線程而不是當前進程。

那麼對於一些意外退出的 NodeJS 程序,如何來取得 exitCode ?每一個退出碼又代表什麼?今天我們就來學習一下。

透過 NodeJS 的 child_process 子程序取得退出碼

child_process.fork() 方法是 child_process.spawn() 的特例,專門用於衍生新的 NodeJS 流程。

const fork = require("child_process").fork;

console.log("main ", process.argv);

const fs = require("fs");

const fd = fs.openSync("./a.log", "a");

const child = fork("./index.js", {
    stdio: ["ipc", "pipe", fd]
});

child.on("error", (error) => {
    let info = `child process error ${error}`;
    fs.writeSync(fd, info);
    console.log(info);
});

child.on("exit", (code) => {
    let info = `child process exited with code ${code}`;
    fs.writeSync(fd, info);
    console.log(info);
});

子程式執行參數

const fork = require('child_process').fork;

console.log('main ',process.argv);

const fs=require('fs');

const fd = fs.openSync('./a.log','a');

// 子程序参数
let args = [];
args[0] = 'test';

const child = fork('./index.js',args,{
    stdio:['ipc','pipe',fd]
});

child.on('error', (error) => {
    let info = `child process error ${error}`;
    fs.writeSync(fd,info);
    console.log(info);
});

child.on('exit', (code) => {
    let info = `child process exited with code ${code}`;
    fs.writeSync(fd,info);
    console.log(info);
});

NodeJS退出碼

#當沒有更多非同步操作掛起時,NodeJS 通常會以0 狀態碼退出。在其他情況下使用以下狀態代碼:

  • 1 未捕獲的致命異常:存在未捕獲的異常,且其沒有被域或'uncaughtException' 事件句柄處理。
  • 2: 未使用(由Bash 保留用於內建誤用)
  • 3 內部JavaScript 解析錯誤: NodeJS 引導過程中的內部JavaScript 原始碼會導致解析錯誤。這是極為罕見的,通常只能在 NodeJS 本身的開發過程中發生。
  • 4 內部 JavaScript 評估失敗:NodeJS 引導過程中的內部 JavaScript 原始碼在評估時未能傳回函數值。這是極為罕見的,通常只能在 NodeJS 本身的開發過程中發生。
  • 5 致命錯誤:V8 中存在不可恢復的致命錯誤。通常將列印帶有前綴 FATAL ERROR 的訊息到標準錯誤。
  • 6 非函數的內部異常句柄:存在未捕獲的異常,但內部致命異常句柄不知何故設定為非函數,無法呼叫。
  • 7 內部異常句柄運行時失敗:存在未捕獲的異常,並且內部致命異常句柄函數本身在嘗試處理時拋出錯誤。例如,如果 'uncaughtException'domain.on('error') 句柄拋出錯誤,就會發生這種情況。
  • 8: 未使用。在先前版本的 NodeJS 中,退出碼 8 有時表示未捕獲的異常。
  • 9 無效參數:指定了未知選項,或提供了需要值的選項而沒有值。
  • 10 內部 JavaScript 執行階段失敗:NodeJS 引導過程中的內部 JavaScript 原始碼在呼叫引導函數時拋出錯誤。這是極為罕見的,通常只能在 NodeJS 本身的開發過程中發生。
  • 12 無效的偵錯參數:設定了--inspect 和/或--inspect-brk 選項,但選擇的連接埠號碼無效或不可用。
  • 13 未完成的頂層等待:在頂層程式碼中的函數外使用了await,但傳入的Promise 從未解決。
  • >128 訊號退出:如果NodeJS 收到致命的訊號,例如SIGKILLSIGHUP#,則其退出碼將是128 加上訊號代碼的值。這是標準的 POSIX 實踐,因為退出碼被定義為 7 位整數,並且訊號退出設定高位,然後包含訊號代碼的值。例如,訊號SIGABRT 的值是6,因此預期的退出碼將會是128 6134

總結

以上就是取得 NodeJS 程式退出碼的方法以及退出碼枚舉。

~本文完,感謝閱讀!

更多程式相關知識,請造訪:程式設計影片! !

以上是淺談NodeJS取得程式退出碼的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除