获取 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
线程中,该函数停止当前线程而不是当前进程。
那么对于一些意外推出的情况,如何来获取 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 程序退出码的方法以及退出码枚举。
~
~本文完,感谢阅读!
~
学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!
大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!
你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!
知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!
获取 NodeJS 程序退出码相关推荐
- 小程序代码反编译获取小程序源码nodejs
第一步,360软件管理里面搜雷电模拟器4,然后按装 第二步,打开后按顺序下载,微信(用来打开小程序来获取小程序源码的wxapkg文件),QQ(从本地电脑发RE管理器到模拟器中进行安装),在模拟器中安装 ...
- 两步快速获取小程序源码
最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了某个小程序的前端实现,在实际练手中,完全是黑盒的,纯靠推测,部分效果在各种尝试后能能做出大致的实现,但是有些细节,实在不知道如 ...
- 使用安卓模拟器获取任意小程序源码完整教程(多图预警!)
刚刚get到一个新技能,趁着热乎赶紧整理出来分享给大家.本教程适用于任何小程序的反编译,但大多数项目都做了代码的压缩混淆,尤其是使用第三方框架的.而且小程序开发工具也会做一层编译,所以破解得到的项目实 ...
- 只需两步快速获取微信小程序源码
第一次在掘金这样高大上的社区写文章,忐忑地敲下我获取小程序源码过程中的经验分享. 最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了某个小程序的前端实现,过程一言难尽,差不多两 ...
- 反编译获取任何微信小程序源码——看这篇就够了(最新)
一 准备工具 1 node.js 运行环境 下载地址:https://nodejs.org/en/ 2 反编译的脚本 链接:https://pan.baidu.com/s/1InxRoozDDb-C- ...
- 获取PC端微信小程序源码
获取PC端微信小程序源码 参考文章链接 链接1 链接2 准备工具 解密工具 UnpackMiniApp.exe 下载链接 逆向工具 wxappUnpacker 下载链接1 下载链接2 整体流程 第 1 ...
- 只需两步获取任何微信小程序源码
只需两步获取任何微信小程序源码 kedwan关注 12018.09.15 09:32:43字数 2,428阅读 3,946 转载自百家号作者:不忘初心lucy 第一次在掘金这样高大上的社区写文章,忐忑 ...
- 小程序 获取带参数太阳码的参数,并解析出来(wxacode.getUnlimited)
首先,我这边使用的是小程序的第二种场景码,前提是你这个小程序必须是已经发布的 点击跳转查看详细官方文档:获取小程序 这个码需要后台配置生成好太阳码然后返回给前端. 假设:你传给后台的page为:&qu ...
- 关于Qt退出码255的一点总结
Qt程序退出码255 先说症状,程序运行正常,但是在关闭程序时,却出现的异常,提示退出码为255.查看了一翻代码,也没有找到有什么问题,百度上也没找到有效的解决方法.后来偶然发现了问题所在,原因是在析 ...
最新文章
- 风清杨之Oracle的安装与说明
- linux fedora下vscode终端字体间距不正常解决办法
- 「Apollo」直接在docker内部安装miniconda失败
- 【Tools】MarkDown教程(一)-MarkDown简介
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法:三十张图弄懂「图的两种遍历方式」...
- 生成0到9之间的随机整数
- slice 和splice 的区别 js
- Azure 网站上的 Java
- FindBugs-IDEA插件的使用
- 为企业选择最合适的SSL证书
- 标签打印软件如何灵活调整打印方向
- Linux初级入门百篇-lsof工具
- 联想笔记本快捷键控制千千静听 2009年10月2日19:09:44
- 面试经验之北京掌上先机
- NBA联赛全面暂停!VR直播观赛会跃身主流吗?
- 51nod lyk与gcd
- st7920驱动OCMJ2X8C屏使用CGRAM自定义图标
- TNS-12546 TNS-12560 TNS-00516
- iOS各浏览器、macOS的safari无法使用websocket问题
- PyTorch可视化工具:GPU内存分配
热门文章
- Scala的所有符号运算符都意味着什么?
- 如何在iOS 9中启用“应用程序传输安全性”的情况下加载HTTP URL? [重复]
- 查找包含特定值的数组的文档
- android中搜索对话框,android – 如何使用onSearchRequested()调用搜索对话框
- JAVA:jar包下载地址大全
- 武汉理工大学合肥工业大学 计算机,合工大为什么从985降到211?附合肥工业大学211地位(合工大不是985)...
- java方法中与参数怎么调用,java中怎么从一个方法中调用另一个方法中的参数?(以及如何提取数字)...
- Java中的Bean是什么?
- Open3d之对点云进行DBSCAN 聚类
- 智能高柜机器人_再装修说啥也不能忘,橱柜旁边预留50公分,打高柜能多个家政间...