前言要退出正在运行的NodeJS程序,我们可以使用Ctrl+C或者process.exit()退出。这两个操作都会强制进程尽快退出,即使还有未完全完成的未决异步操作,包括对process.stdout和process.stderr的I/O操作。如果Node.js进程由于错误情况需要终止,抛出未捕获的错误并允许进程相应地终止比调用process.exit()更安全,例如:importprocessfrom'process';//如何正确设置退出码,让进程优雅退出。如果(someConditionNotMet()){printUsageToStdout();process.exitCode=1;}在工作线程中,这个函数停止当前线程而不是当前进程。那么如何获得一些意外启动的exitCode呢?每个退出代码代表什么?今天就来了解一下吧。通过NodeJS的child_process子进程获取exitcodechild_process.fork()方法是child_process.spawn()的一个特例,专门用来spawn一个新的NodeJS进程。constfork=require("child_process").fork;console.log("main",process.argv);constfs=require("fs");constfd=fs.openSync("./a.log","a");constchild=fork("./index.js",{stdio:["ipc","pipe",fd]});child.on("error",(error)=>{让info=`childprocesserror${error}`;fs.writeSync(fd,info);console.log(info);});child.on("exit",(code)=>{letinfo=`child进程退出,代码为${code}`;fs.writeSync(fd,info);console.log(info);});子程序执行参数constfork=require('child_process').fork;console.log('main',process.argv);constfs=require('fs');constfd=fs.openSync('./a.log','a');//子程序参数letargs=[];args[0]='test';constchild=fork('./index.js',args,{stdio:['ipc','pipe',fd]});child.on('error',(error)=>{letinfo=`childprocesserror${error}`;fs.writeSync(fd,info);console.log(info);});child.on('exit',(code)=>{letinfo=`childprocessexitedwithcode${code}`;fs.write同步(fd,信息);控制台日志(信息);});NodeJS退出代码当没有更多异步操作挂起时,NodeJS通常以状态代码0退出在其他情况下使用以下状态代码:1UncaughtFatalexception:存在未捕获的异常并且未被域或“uncaughtException”事件处理程序处理.2:未使用(由Bash保留用于内置误用)3内部JavaScript解析错误:NodeJS引导期间的内部JavaScript源代码导致解析错误。这是极其罕见的,通常只发生在NodeJS本身的开发过程中。4内部JavaScript评估失败:NodeJS引导过程中的内部JavaScript源代码在评估时未能返回函数值。这是极其罕见的,通常只发生在NodeJS本身的开发过程中。5FatalError:V8中存在不可恢复的致命错误。通常,以FATALERROR为前缀的消息将被打印到标准错误。6非函数的内部异常处理程序:存在未捕获的异常,但内部致命异常处理程序以某种方式设置为非函数且无法调用。7内部异常处理程序运行时失败:存在未捕获的异常,内部致命异常处理程序函数本身在尝试处理时抛出错误。例如,如果“uncaughtException”或domain.on('error')处理程序抛出错误,就会发生这种情况。8:未使用。在以前的NodeJS版本中,退出代码8有时表示未捕获的异常。9无效参数:指定了未知选项,或者提供了需要值的选项但未提供值。10InternalJavaScriptruntimefailure:NodeJSbootstrap进程中的内部JavaScript源代码在调用bootstrap函数时抛出错误。这是极其罕见的,通常只发生在NodeJS本身的开发过程中。12无效的调试参数:设置了--inspect和/或--inspect-brk选项,但所选端口号无效或不可用。13Unfulfilledtop-levelawait:在顶层代码的一个函数外使用了await,但是传入的Promise一直没有被resolved。>128信号退出:如果NodeJS接收到致命信号,例如SIGKILL或SIGHUP,其退出代码将为128加上信号代码的值。这是标准的POSIX实践,因为退出代码被定义为7位整数,信号退出设置高位,然后包含信号代码的值。比如signalSIGABRT的值为6,那??么期望的exitcode就是128+6即134。综上所述,就是NodeJS程序获取exitcode的方法和exitcode的枚举。~~本文到此结束,感谢阅读!~学习有趣的知识,认识有趣的朋友,塑造有趣的灵魂!大家好,我是〖编程三昧〗的作者王隐,我的公众号是《编程三昧》,欢迎关注,希望大家多多指教!你来,怀揣期待,我以墨香迎接你!您归来,不分得失,只送回味!知识与技能并重,内功与外功并重,理论与实践两手抓,两手都要用力!
