博主信息
Sky
博文
291
粉丝
0
评论
0
访问量
7039
积分:0
P豆:617

获取 NodeJS 程序退出码

2021年10月18日 20:50:31阅读数:14博客 / Sky

前言

想要退出正在运行的 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 程序退出码的方法以及退出码枚举。


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 如何 NodeJS 退?下面本篇文章给大家介绍一下 NodeJS 退的方法以及退枚举,希望对大家有所帮助!
    【exit(0)】在c语言中的意思是正常运行退,【exit()】就是退,传入的参数是退时的状态,0表示正常退,其他表示非正常退
    php中,try catch语句配合throw关键字可以用来捕中的异常,中所产生的异常可以被try的throw语句抛并被catch语句捕;语法“try{//代}catch(Exception
    JavaScript中有3种结构,分别为:1、顺结构;默认都是从上到下逐行执行。2、分支结构;根据条件判断的结果,有选择的执行不同。3、循环结构;可以反复执行同一代段,到达临界时退
    开发教栏目记录本博客仅作为记录微信小登录流, 具体代请参考微信文档.
    nodejs是能够在服务器端运行JavaScript的开放源代、跨平台运行环境;Node.js采用Google开发的V8运行代,使用事件驱动、非阻塞和异步输入输模型等技术来提高性能,可优化应用的传输量和规模
    cpu下一次要执行的指令地址的部件是“计数器”。为了保证能够连续地执行下去,处理器必须具有某些手段来确定下一条指令的地址;而计数器正是起到这种作用。
    centos安装go语言的方法:1、go语言源包;2、解压源包到指定目录;3、查看运行的路径,将该路径加入到环境变量中;4、测试是否安装成功。

    2021-06-21

    600

    HTML注入是一种漏洞,一种网络攻击方式,当网页无法清理用户提供的输入或验证输时,攻击者就可以伪造自己的有效负载,并通过易受攻击的字段将恶意HTML代注入应用,从而修改网页内容,甚至一些敏感数据
    java读XML时,生僻字乱的解决办法:首先用记事本将XML文件打开,将第一行中的【encoding="gb2312"】改为【="utf-8"】;然后再另存为
    先在body里面添加ul标签,通过js到id等于list的标签定义一个空字符串用来连接增加的标签,并展示来如图的js代展示的是前三个颜色不同,余下的颜色相同的圆圈号。
    在之前的文章《如何通过PHP一个10行的杨辉三角》中,我们介绍了使用PHP输任意行杨辉三角的方法。本篇文章我们来了解一下如何使用PHP判断给定年份是不是闰年,如何输20世纪的所有闰年。
    方法步骤:1、在度娘查找微信公众号官网,点击官网;2、扫登录需要ID的公众号;3、点击菜单栏的“开发”目录中的“基本配置”,然后就可以看到小的开发者ID了。
    计算机工作最重要的特征是存储与自动控制,其基本原理是计算机在运行时,先从内存中第一条指令,通过控制器的译,按指令的要求,从存储器中数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去
    2021年七夕情人节将要来临,作为一名猿也不要落后了,快来用代展示你的爱吧!下面PHP中文网给大家准备了6款七夕情人节表白神器,把说不口的话,放到代里送给你爱的人吧!
    在之前的文章《PHP循环学习九:给定两数间的最大公因数》中,我们给大家介绍了在PHP怎么通过while循环语句来求给定两个整数间的最大公约数,下面带大家来看看,给定一个三位整数,怎么判断该数是不是水仙花数