如何退出用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 是一种让进程优雅结束的信号。这种信号从进程管理者发出,比如新贵或主管等等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。