您好,登錄后才能下訂單哦!
這篇文章主要介紹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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。