如何退出用Node.js运行的程序

1.控制台退出

在控制台运行的话,可以使用ctrl-C 退出。但是这一小节主要讨论的是编程式退出。

2.编程式退出

Node.js 的核心模块process有一个方法可以编程式退出:process.exit()

当这个方法被调用的时候,无论是已经发起的网络请求,文件系统调用,进程等待输出时处于等待状态,都可以被立刻终止。

process.exit(1)

退出码默认是0,代表着成功。不同的退出码代表着不同的意思。

1 没有被捕获到的致命异常。
2 没有被使用(Bash 保留用于内置误用)。
3 内部JavaScript解析错误。这个错误极少发生,一般发生在Node.js的开发过程中.
4 内部JavaScript求值错误。这个错误也极少发生,一般发生在Node.js的开发过程中.
5 致命错误。这是V8中的致命的不可恢复的错误,相关信息会被打印到stderr中,并以FATAL ERROR开头。
6 非函数内部异常处理程序。存在未捕获的异常,但内部致命异常处理函数不知何故设置为非函数,无法调用。
7 内部异常处理程序运行时失败。
8 没有被使用。在老版本的Node.js,8也表示未被捕获的异常。
9 无效的参数。
10 内部JavaScript脚本运行时失败。
11 无效的调试参数。
12 未完成的顶级等待。
>128 信号退出。如果 Node.js 收到一个致命信号,例如 SIGKILL 或 SIGHUP,那么它的退出代码将是 128 加上信号代码的值。

也可以通过设置process.exitCode属性。

process.exitCode = 1

当程序运行结束的时候,Node.js将会返回设置的这个退出值。
当所有处理完成后,程序将优雅地退出。
很多时候我们使用 Node.js 启动服务器,比如这个 HTTP 服务器:

const express = require('expresss')
const app = express()
app.get('/',(req, res)=>{
  res.send('Hi!')
})
app.listen(3000, ()=> console.log('Server is ready'));

这个程序永远不会结束。 如果调用 process.exit(),任何当前挂起或正在运行的请求都将被中止。

在这种情况下,需要向命令发送一个 SIGTERM 信号,并使用进程信号处理程序进行处理:

const express = require('express')
const app = express()
app.get('/', (req, res)=>{
  res.send('Hi!')
})
const server = app.listen(3000,()=> console.log('Server is ready'))
process.on('SIGTERM',()=>{
  // close server
  server.close(()=>{
    console.log('Process terminated')
  })
})

SIGTERM 是一种让进程优雅结束的信号。这种信号从进程管理者发出,比如新贵或主管等等。


null
4 声望0 粉丝