>  기사  >  웹 프론트엔드  >  NodeJS에서 프로그램 종료 코드를 얻는 방법에 대한 간략한 설명

NodeJS에서 프로그램 종료 코드를 얻는 방법에 대한 간략한 설명

青灯夜游
青灯夜游앞으로
2021-09-28 10:39:441761검색

NodeJS 프로그램 종료 코드를 얻는 방법은 무엇입니까? 다음 글에서는 Node.js 프로그램 종료 코드를 얻는 방법과 종료 코드 열거에 대해 소개하겠습니다.

NodeJS에서 프로그램 종료 코드를 얻는 방법에 대한 간략한 설명

실행 중인 NodeJS 프로그램을 종료하려면 Ctrl + C 또는 process.exit()를 통해 종료할 수 있습니다. [추천 학습: "nodejs tutorialCtrl + 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,则其退出码将是 加上信号代码的值。 这是标准的 POSIX 实践,因为退出码被定义为 7 位整数,并且信号退出设置高位,然后包含信号代码的值。 例如,信号 SIGABRT 的值是 6,因此预期的退出码将是 + 6134"]
이 두 가지는 모두 process.stdoutprocess.stderr에 대한 I/O 작업을 포함하여 아직 불완전하게 완료된 비동기 작업이 보류 중인 경우에도 해당 작업은 가능한 한 빨리 프로세스를 강제 종료합니다. .

오류 조건으로 인해 Node.js 프로세스를 종료해야 하는 경우 process.exit()를 호출하는 것보다 잡히지 않은 오류를 발생시키고 이에 따라 프로세스가 종료되도록 허용하는 것이 더 안전합니다.

rrreee

Worker 스레드에서 이 함수는 현재 프로세스 대신 현재 스레드를 중지합니다.

그렇다면 예기치 않게 종료되는 일부 NodeJS 프로그램에 대한 종료 코드를 얻는 방법은 무엇입니까? 각 종료 코드는 무엇을 의미하나요? 오늘은 그것에 대해 알아봅시다.

NodeJS의 child_process 하위 프로세스를 통해 종료 코드 가져오기child_process.fork() 메서드는 child_process.spawn()의 특별한 경우로, 특별히 새 NodeJS를 생성하는 데 사용됩니다. 프로세스. rrreee🎜서브루틴 실행 매개변수🎜rrreee

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는 최상위 코드의 함수 외부에서 사용되지만 들어오는 약속은 결코 해결되지 않습니다. 🎜
  • >128 신호 종료: NodeJS가 SIGKILL 또는 SIGHUP와 같은 치명적인 신호를 수신하는 경우 , 종료 코드는 에 신호 코드 값을 더한 값입니다. 종료 코드는 7비트 정수로 정의되고 신호 종료는 상위 비트를 설정한 다음 신호 코드 값을 포함하므로 이는 표준 POSIX 방식입니다. 예를 들어 SIGABRT 신호의 값은 6이므로 예상 종료 코드는 + 6 또는 134. 🎜🎜🎜Summary🎜🎜위는 NodeJS 프로그램의 종료 코드와 종료 코드 열거를 얻는 방법입니다. 🎜🎜~이 글이 끝났습니다. 읽어주셔서 감사합니다! 🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜

위 내용은 NodeJS에서 프로그램 종료 코드를 얻는 방법에 대한 간략한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제