Maison > interface Web > js tutoriel > Une brève discussion sur la façon d'obtenir le code de sortie du programme dans NodeJS

Une brève discussion sur la façon d'obtenir le code de sortie du programme dans NodeJS

青灯夜游
Libérer: 2021-09-29 09:39:15
avant
1806 Les gens l'ont consulté

Comment obtenir le code de sortie du programme NodeJS ? L'article suivant vous présentera la méthode d'obtention du code de sortie du programme Node.js et l'énumération du code de sortie. J'espère qu'il vous sera utile !

Une brève discussion sur la façon d'obtenir le code de sortie du programme dans NodeJS

Si nous voulons quitter le programme NodeJS en cours d'exécution, nous pouvons soit quitter via Ctrl + C ou via process.exit(). [Apprentissage recommandé : "nodejs tutorielCtrl + C  的方式,也可以通过 process.exit()来执行退出。【推荐学习:《nodejs 教程》】

这两种操作都将强制进程尽快退出,即使仍有未完全完成的异步操作挂起,包括对 process.stdoutprocess.stderr 的 I/O 操作。

如果由于错误情况需要终止 Node.js 进程,则抛出未捕获的错误并允许进程相应地终止比调用 process.exit() 更安全,比如:

import process from 'process';

// 如何正确设置退出码,同时让进程正常退出。
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exitCode = 1;
}
Copier après la connexion

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);
});
Copier après la connexion

子程序执行参数

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);
});
Copier après la connexion

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"]
Ces deux Tous les opérations forceront le processus à se terminer dès que possible, même s'il y a encore des opérations asynchrones incomplètes en attente, y compris les opérations d'E/S sur process.stdout et process.stderr.

Si le processus Node.js doit être terminé en raison d'une condition d'erreur, il est plus sûr de générer une erreur non détectée et de permettre au processus de se terminer en conséquence plutôt que d'appeler process.exit(), comme ceci :

rrreee

Dans le thread Worker, cette fonction arrête le thread actuel au lieu du processus en cours.

Alors, comment obtenir le code de sortie pour certains programmes NodeJS qui se terminent de manière inattendue ? Que signifie chaque code de sortie ? Apprenons-en aujourd’hui.

Obtenez le code de sortie via le processus enfant child_process de NodeJSLa méthode child_process.fork() est un cas particulier de child_process.spawn(), spécialement utilisé pour générer un nouveau NodeJS processus. rrreee🎜Paramètres d'exécution du sous-programme🎜rrreee

Code de sortie NodeJS🎜🎜NodeJS se termine généralement avec un code d'état 0 lorsqu'il n'y a plus d'opérations asynchrones en attente de fermeture. Utilisez les codes d'état suivants dans les autres cas : 🎜
  • 1 Exception fatale non interceptée : une exception non interceptée existe et elle n'est pas couverte par un domaine ou un 'uncaughtException' Traitement du gestionnaire d'événements. 🎜
  • 2 : Inutilisé (réservé par Bash en cas d'utilisation abusive intégrée) 🎜
  • 3 Erreur d'analyse JavaScript interne : NodeJS interne Le code source JavaScript lors du démarrage provoque des erreurs d'analyse. Ceci est extrêmement rare et ne se produit généralement que lors du développement de NodeJS lui-même. 🎜
  • 4 Échec de l'évaluation JavaScript interne : le code source JavaScript interne lors du démarrage de NodeJS n'a pas réussi à renvoyer une valeur de fonction lors de l'évaluation. Ceci est extrêmement rare et ne se produit généralement que lors du développement de NodeJS lui-même. 🎜
  • 5 Erreur fatale : Une erreur fatale irrécupérable existe dans la V8. Normalement, un message préfixé par FATAL ERROR sera imprimé en erreur standard. 🎜
  • 6 Gestionnaire d'exceptions interne pour non-fonction : il existe une exception non interceptée, mais le gestionnaire d'exceptions fatales interne est d'une manière ou d'une autre défini sur une non-fonction et ne peut pas être appelé. 🎜
  • 7 Échec d'exécution du gestionnaire d'exceptions interne : il y a eu une exception non interceptée et la fonction du gestionnaire d'exceptions fatales interne elle-même a généré une erreur en essayant de la gérer. Cela se produit, par exemple, si le handle 'uncaughtException' ou domain.on('error') renvoie une erreur. 🎜
  • 8 : Non utilisé. Dans les versions précédentes de NodeJS, le code de sortie 8 indiquait parfois une exception non interceptée. 🎜
  • 9 Argument invalide : une option inconnue a été spécifiée ou une option nécessitant une valeur a été fournie sans valeur. 🎜
  • 10 Échec d'exécution JavaScript interne : le code source JavaScript interne lors du bootstrap de NodeJS génère une erreur lors de l'appel de la fonction de bootstrap. Ceci est extrêmement rare et ne se produit généralement que lors du développement de NodeJS lui-même. 🎜
  • 12 Paramètres de débogage invalides : --inspect et/ou --inspect-brksont définis > option, mais le numéro de port sélectionné est invalide ou indisponible. 🎜
  • 13 Await de niveau supérieur inachevé : await est utilisé en dehors de la fonction dans le code de niveau supérieur, mais le La promesse n'est jamais résolue. 🎜
  • >128 Signal de sortie : Si NodeJS reçoit un signal fatal, tel que SIGKILL ou SIGHUP , son code de sortie sera plus la valeur du code signal. Il s'agit d'une pratique POSIX standard, car les codes de sortie sont définis comme des entiers de 7 bits et les sorties de signal définissent le bit haut suivi de la valeur du code de signal. Par exemple, la valeur du signal SIGABRT est 6, donc le code de sortie attendu serait + 6 ou 134. 🎜🎜🎜Résumé🎜🎜Ce qui précède est la méthode pour obtenir le code de sortie du programme NodeJS et l'énumération du code de sortie. 🎜🎜~Cet article est terminé, merci d'avoir lu ! 🎜🎜Pour plus de connaissances sur la programmation, veuillez visiter : 🎜Vidéos de programmation🎜 ! ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal