NodeJS 프로그램 종료 코드를 얻는 방법은 무엇입니까? 다음 글에서는 Node.js 프로그램 종료 코드를 얻는 방법과 종료 코드 열거에 대해 소개하겠습니다.
실행 중인 NodeJS 프로그램을 종료하려면 Ctrl + C
또는 process.exit()
를 통해 종료할 수 있습니다. [추천 학습: "nodejs tutorialCtrl + 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
"]
process.stdout
및 process.stderr
에 대한 I/O 작업을 포함하여 아직 불완전하게 완료된 비동기 작업이 보류 중인 경우에도 해당 작업은 가능한 한 빨리 프로세스를 강제 종료합니다. . 오류 조건으로 인해 Node.js 프로세스를 종료해야 하는 경우 process.exit()
를 호출하는 것보다 잡히지 않은 오류를 발생시키고 이에 따라 프로세스가 종료되도록 허용하는 것이 더 안전합니다. rrreee
Worker
스레드에서 이 함수는 현재 프로세스 대신 현재 스레드를 중지합니다. 그렇다면 예기치 않게 종료되는 일부 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
는 최상위 코드의 함수 외부에서 사용되지만 들어오는 약속
은 결코 해결되지 않습니다. 🎜>128
신호 종료: NodeJS가 SIGKILL
또는 SIGHUP
와 같은 치명적인 신호를 수신하는 경우 , 종료 코드는 에 신호 코드 값을 더한 값입니다. 종료 코드는 7비트 정수로 정의되고 신호 종료는 상위 비트를 설정한 다음 신호 코드 값을 포함하므로 이는 표준 POSIX 방식입니다. 예를 들어 SIGABRT
신호의 값은 6
이므로 예상 종료 코드는 + 6
또는 134. 🎜🎜🎜Summary🎜🎜위는 NodeJS 프로그램의 종료 코드와 종료 코드 열거를 얻는 방법입니다. 🎜🎜~이 글이 끝났습니다. 읽어주셔서 감사합니다! 🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜
위 내용은 NodeJS에서 프로그램 종료 코드를 얻는 방법에 대한 간략한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!