nodejs

169 阅读1分钟

9.pm2 守护进程原理是什么

守护进程是什么:守护进程是一个在后台运行并且不受任何终端控制的进程,并且能够因为某个异常导致进程退出的时候重启子进程。守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行.使用命令 ps axj 查看当前守护进程。

实现监听子进程退出

利用 NodeJS 的事件机制,监听 exit 事件

在 master.js 中使用 fork 创建子进程监听 exit 事件,1s 之后创建一个新的子进程

// master.js const { fork } = require('child_process');

const forkChild = () => { const child = fork('log.js'); child.on('exit', () => { setTimeout(() => { forkChild(); }, 1000); }); }; forkChild();

// log.js const fs = require('fs'); const path = require('path');

fs.open(path.resolve(__dirname, 'log.txt'), 'w', function (err, fd) { setInterval(() => { fs.write(fd, process.pid + '\n', function () {}); }, 2000); }); 使用 node master 启动项目之后,使用 kill 命令杀掉对应的子进程,能够成功重启子进程,守护进程生效~

如何退出终端运行?

使用 setsid

在 Node 中如何调用 setsid 方法呢? Node 尚未对 setsid 进程封装,但是我们可以通过 child_process.spawn 来调用该方法。 spawn 中有一个配置项 detached,当其 detached: true 时,会调用 setsid 方法