這篇文章主要介紹NodeJS如何獲取程序退出碼,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
想要退出正在運行的 NodeJS 程序,我們既可以通過 Ctrl + C 的方式,也可以通過 process.exit()來執行退出。
這兩種操作都將強制進程盡快退出,即使仍有未完全完成的異步操作掛起,包括對 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,則其退出碼將是 128 加上信號代碼的值。 這是標準的 POSIX 實踐,因為退出碼被定義為 7 位整數,并且信號退出設置高位,然后包含信號代碼的值。 例如,信號 SIGABRT 的值是 6,因此預期的退出碼將是 128 + 6 或 134。
以上是“NodeJS如何獲取程序退出碼”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。