NodeJS如何获取程序退出码
这篇文章主要介绍NodeJS如何获取程序退出码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
想要退出正在运行的 NodeJS 程序,我们既可以通过 Ctrl + C
的方式,也可以通过 process.exit()
来执行退出。
这两种操作都将强制进程尽快退出,即使仍有未完全完成的异步操作挂起,包括对 process.stdout
和 process.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 收到致命的信号,例如SIGKILL
或SIGHUP
,则其退出码将是128
加上信号代码的值。 这是标准的 POSIX 实践,因为退出码被定义为 7 位整数,并且信号退出设置高位,然后包含信号代码的值。 例如,信号SIGABRT
的值是6
,因此预期的退出码将是128
+6
或134
。
以上是“NodeJS如何获取程序退出码”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341