如何退出用 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 是一种让过程优雅完结的信号。这种信号从过程管理者收回,比方新贵或主管等等。