守护进程是后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。
守护进程脱离终端的主要原因两点:
fork
等方法创建子进程"/"
或 "/usr"
等)setsid
主要完成三件事:
然而,Nodejs 中并没有对 setsid
方法的直接封装,翻阅文档发现有一个地方是可以调用该方法的。
const spawn = require('child_process').spawn;let server = null;function startServer() {console.log('restart server');server = spawn('node', ['app.js']);console.log('node js pid is' + server.pid);server.on('close', function(code, signal) {server.kill(signal);server = startServer();});server.on('error', function(code, signal) {server.kill(signal);server = startServer();});return server;}startServer();
在实际工作中对于守护进程并不陌生,例如 PM2、Egg-Cluster 等,以上只是一个简单的 Demo 对守护进程做了一个说明,在实际工作中对守护进程的健壮性要求还是很高的,例如:进程的异常监听、工作进程管理调度、进程挂掉之后重启等等,这些还需要我们去不断思考。