Heim > Web-Frontend > js-Tutorial > Hauptteil

Eine kurze Diskussion darüber, wie Sie den Programm-Exit-Code in NodeJS erhalten

青灯夜游
Freigeben: 2021-09-29 09:39:15
nach vorne
1765 Leute haben es durchsucht

Wie erhalte ich den Exit-Code für das NodeJS-Programm? Der folgende Artikel stellt Ihnen die Methode zum Erhalten des Node.js-Programm-Exit-Codes und die Exit-Code-Aufzählung vor. Ich hoffe, er wird Ihnen hilfreich sein!

Eine kurze Diskussion darüber, wie Sie den Programm-Exit-Code in NodeJS erhalten

Wenn wir das laufende NodeJS-Programm beenden möchten, können wir es entweder über Strg + C oder über process.exit() beenden. [Empfohlenes Lernen: „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;
}
Nach dem Login kopieren

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);
});
Nach dem Login kopieren

子程序执行参数

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);
});
Nach dem Login kopieren

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"]
Diese beiden Alle Vorgänge erzwingen, dass der Prozess so schnell wie möglich beendet wird, auch wenn noch unvollständig abgeschlossene asynchrone Vorgänge ausstehen, einschließlich E/A-Vorgänge für process.stdout und process.stderr .

Wenn der Node.js-Prozess aufgrund einer Fehlerbedingung beendet werden muss, ist es sicherer, einen nicht erfassten Fehler auszulösen und den Prozess entsprechend beenden zu lassen, als beispielsweise process.exit() aufzurufen Dies:

rrreee

Im Worker-Thread stoppt diese Funktion den aktuellen Thread anstelle des aktuellen Prozesses.

Wie erhält man also den ExitCode für einige NodeJS-Programme, die unerwartet beendet werden? Was bedeuten die einzelnen Exit-Codes? Lassen Sie uns heute mehr darüber erfahren.

Rufen Sie den Exit-Code über den untergeordneten Prozess child_process von NodeJS ab.Die Methode child_process.fork() ist ein Sonderfall von child_process.spawn(), der speziell zum Erstellen neuer NodeJS verwendet wird Prozesse. rrreee🎜Subroutinen-Ausführungsparameter🎜rrreee

NodeJS-Exit-Code🎜🎜NodeJS wird normalerweise mit einem 0-Statuscode beendet, wenn keine weiteren asynchronen Vorgänge zum Beenden anstehen. Verwenden Sie in anderen Fällen die folgenden Statuscodes: 🎜
  • 1 Unabgefangene schwerwiegende Ausnahme: Es liegt eine nicht abgefangene Ausnahme vor, die nicht durch eine Domäne oder einen 'uncaughtException' Event-Handler-Verarbeitung. 🎜
  • 2: Nicht verwendet (von Bash für integrierten Missbrauch reserviert) 🎜
  • 3 Interner JavaScript-Parsing-Fehler: NodeJS Internal JavaScript-Quellcode verursacht beim Booten Parsing-Fehler. Dies ist äußerst selten und geschieht normalerweise nur während der Entwicklung von NodeJS selbst. 🎜
  • 4 Interne JavaScript-Auswertung fehlgeschlagen: Der interne JavaScript-Quellcode konnte beim NodeJS-Bootstrapping bei der Auswertung keinen Funktionswert zurückgeben. Dies ist äußerst selten und geschieht normalerweise nur während der Entwicklung von NodeJS selbst. 🎜
  • 5 Schwerwiegender Fehler: In V8 liegt ein nicht behebbarer schwerwiegender Fehler vor. Normalerweise wird eine Meldung mit dem Präfix FATAL ERROR im Standardfehler ausgegeben. 🎜
  • 6 Interner Ausnahmehandler für Nicht-Funktion: Es gibt eine nicht abgefangene Ausnahme, aber der interne schwerwiegende Ausnahmehandler ist irgendwie auf eine Nicht-Funktion eingestellt und kann das nicht sein angerufen. 🎜
  • 7 Laufzeitfehler des inneren Ausnahmehandlers: Es gab eine nicht abgefangene Ausnahme und die innere schwerwiegende Ausnahmehandlerfunktion selbst hat beim Versuch, sie zu behandeln, einen Fehler ausgegeben. Dies geschieht beispielsweise, wenn das Handle 'uncaughtException' oder domain.on('error') einen Fehler auslöst. 🎜
  • 8: Nicht verwendet. In früheren Versionen von NodeJS deutete der Exit-Code 8 manchmal auf eine nicht abgefangene Ausnahme hin. 🎜
  • 9 Ungültiges Argument: Es wurde eine unbekannte Option angegeben, oder eine Option, die einen Wert erfordert, wurde ohne Wert angegeben. 🎜
  • 10 Interner JavaScript-Laufzeitfehler: Der interne JavaScript-Quellcode beim NodeJS-Bootstrap löst beim Aufruf der Bootstrap-Funktion einen Fehler aus. Dies ist äußerst selten und geschieht normalerweise nur während der Entwicklung von NodeJS selbst. 🎜
  • 12 Ungültige Debugging-Parameter: --inspect und/oder --inspect-brksind gesetzt > Option, aber die ausgewählte Portnummer ist ungültig oder nicht verfügbar. 🎜
  • 13 Unvollendetes Warten auf oberster Ebene: await wird außerhalb der Funktion im Code der obersten Ebene verwendet, aber der eingehende Versprechen wird nie gelöst. 🎜
  • >128 Signalausgang: Wenn NodeJS ein schwerwiegendes Signal empfängt, wie z. B. SIGKILL oder SIGHUP , sein Exit-Code ist plus dem Wert des Signalcodes. Dies ist die übliche POSIX-Praxis, da Exit-Codes als 7-Bit-Ganzzahlen definiert sind und Signal-Exits das High-Bit setzen und dann den Wert des Signalcodes enthalten. Beispielsweise ist der Wert des Signals SIGABRT 6, sodass der erwartete Exit-Code + 6 oder wäre 134. 🎜🎜🎜Zusammenfassung🎜🎜Das Obige ist die Methode zum Abrufen des Exit-Codes des NodeJS-Programms und der Exit-Code-Aufzählung. 🎜🎜~Dieser Artikel ist zu Ende, vielen Dank fürs Lesen! 🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Programmiervideos🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion darüber, wie Sie den Programm-Exit-Code in NodeJS erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage