如何取得 NodeJS 程式退出碼?以下這篇文章跟大家介紹一下取得 Node.js 程式退出碼的方法以及退出碼枚舉,希望對大家有幫助!
想要退出正在執行的NodeJS 程序,我們既可以透過Ctrl C
的方式,也可以透過 process.exit()
來執行退出。 【推薦學習:《nodejs 教程》】
這兩個操作都會強制進程盡快退出,即使仍有未完全完成的非同步操作掛起,包括對process .stdout
和process.stderr
的I/O 操作。
如果由於錯誤情況需要終止Node.js 進程,則拋出未捕獲的錯誤並允許進程相應地終止比調用process.exit()
更安全,例如:
import process from 'process'; // 如何正确设置退出码,同时让进程正常退出。 if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
在Worker
線程中,該函數停止當前線程而不是當前進程。
那麼對於一些意外退出的 NodeJS 程序,如何來取得 exitCode ?每一個退出碼又代表什麼?今天我們就來學習一下。
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 通常會以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 收到致命的訊號,例如SIGKILL
或SIGHUP
#,則其退出碼將是 加上訊號代碼的值。這是標準的 POSIX 實踐,因為退出碼被定義為 7 位整數,並且訊號退出設定高位,然後包含訊號代碼的值。例如,訊號SIGABRT
的值是6
,因此預期的退出碼將會是 6
或134
。
以上就是取得 NodeJS 程式退出碼的方法以及退出碼枚舉。
~本文完,感謝閱讀!
更多程式相關知識,請造訪:程式設計影片! !
以上是淺談NodeJS取得程式退出碼的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!