退出代码


【Exit codes】

当没有更多异步操作待处理时,Node.js 通常会以 0 状态码退出。在其他情况下,会使用以下状态码:

【Node.js will normally exit with a 0 status code when no more async operations are pending. The following status codes are used in other cases:】

  • 1 未捕获的致命异常:发生了未捕获的异常,且未被域或 'uncaughtException' 事件处理程序处理。
  • 2:未使用(Bash 保留用于内置命令误用)
  • 3 内部 JavaScript 解析错误:Node.js 启动过程中内部的 JavaScript 源代码导致了解析错误。这种情况极为罕见,通常只会在 Node.js 本身开发过程中发生。
  • 4 内部 JavaScript 执行失败:在 Node.js 启动过程中内部的 JavaScript 源代码在执行时未能返回函数值。这种情况极为罕见,通常只会在开发 Node.js 本身时发生。
  • 5 致命错误:V8 中发生了无法恢复的致命错误。 通常会在标准错误输出中打印一条以 FATAL ERROR 为前缀的消息。
  • 6 非函数内部异常处理程序:发生了未捕获的异常,但内部致命异常处理程序函数被设置为非函数,无法调用。
  • 7 内部异常处理程序运行时失败:出现了未捕获的异常,内部致命异常处理程序在尝试处理该异常时自身抛出了错误。例如,如果 'uncaughtException'domain.on('error') 处理程序抛出错误,就可能发生这种情况。
  • 8:未使用。在以前的 Node.js 版本中,退出代码 8 有时表示未捕获的异常。
  • 9 无效参数:要么指定了未知选项,要么需要值的选项未提供值。
  • 10 内部 JavaScript 运行时错误:在调用引导函数时,Node.js 引导过程中内部的 JavaScript 源代码抛出了错误。这种情况极其罕见,通常只会在 Node.js 本身开发过程中发生。
  • 12 无效的调试参数:已设置 --inspect 和/或 --inspect-brk 选项,但所选择的端口号无效或不可用。
  • 13 未解决的顶层 await:在顶层代码中在函数外使用了 await,但传入的 Promise 从未被解决。
  • 14 快照失败:Node.js 启动时尝试构建 V8 启动快照,但由于未满足应用状态的某些要求而失败。
  • >128 信号退出:如果 Node.js 接收到致命信号,例如 SIGKILLSIGHUP,其退出码将为 128 加上信号代码的值。这是标准的 POSIX 规范,因为退出码定义为 7 位整数,而信号退出会设置高位,然后包含信号代码的值。例如,信号 SIGABRT 的值为 6,因此预期的退出码将为 128 + 6,即 134