如何获取 nodejs 程序退出码?下面本篇文章给大家介绍一下获取 node.js 程序退出码的方法以及退出码枚举,希望对大家有所帮助!
想要退出正在运行的 nodejs 程序,我们既可以通过 ctrl + c 的方式,也可以通过 process.exit()来执行退出。【推荐学习:《nodejs 教程》】
这两种操作都将强制进程尽快退出,即使仍有未完全完成的异步操作挂起,包括对 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 程序退出码的方法以及退出码枚举。
~本文完,感谢阅读!
更多编程相关知识,请访问:编程视频!!
以上就是浅谈nodejs获取程序退出码的方法的详细内容。