关于前端:获取-NodeJS-程序退出码

33次阅读

共计 2418 个字符,预计需要花费 7 分钟才能阅读完成。

前言

想要退出正在运行的 NodeJS 程序,咱们既能够通过 Ctrl + C 的形式,也能够通过 process.exit() 来执行退出。

这两种操作都将强制过程尽快退出,即便仍有未齐全实现的异步操作挂起,包含对 process.stdoutprocess.stderr 的 I/O 操作。

如果因为谬误状况须要终止 Node.js 过程,则抛出未捕捉的谬误并容许过程相应地终止比调用 process.exit() 更平安,比方:

import process from 'process';

// 如何正确设置退出码,同时让过程失常退出。if (someConditionNotMet()) {printUsageToStdout();
  process.exitCode = 1;
}

Worker 线程中,该函数进行以后线程而不是以后过程。

那么对于一些意外推出的状况,如何来获取 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,则其退出码将是 128 加上信号代码的值。这是规范的 POSIX 实际,因为退出码被定义为 7 位整数,并且信号退出设置高位,而后蕴含信号代码的值。例如,信号 SIGABRT 的值是 6,因而预期的退出码将是 128 + 6134

总结

以上就是获取 NodeJS 程序退出码的办法以及退出码枚举。

~

~ 本文完,感激浏览!

~

学习乏味的常识,结识乏味的敌人,塑造乏味的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢送关注,心愿大家多多指教!

你来,怀揣冀望,我有墨香相迎!你归,无论得失,唯以余韵相赠!

常识与技能并重,内力和外功兼修,实践和实际两手都要抓、两手都要硬!

正文完
 0