https://juejin.cn/post/6844903444839399438

守护进程:进程意外退出时, fork一个新进程继续继续工作

创建守护进程

  • 创建进程a
  • a进程fork出b进程
  • b执行setsid
    • 说明, setsid是Linux中的方法, 对应node中的require(‘child_process’).spawn(setsid: setsid函数将创建新的会话,并使得调用setsid函数的进程成为新会话的领头进程。调用setsid函数的进程是新创建会话中的惟一的进程组,进程组ID为调用进程的进程号。)
    1. 该进程变成一个新会话的会话领导
    2. 该进程变成一个新进程组的组长
    3. 该进程没有控制终端。
  • 退出a进程
    1. spawn - child_process.spawn 使用指定的命令行参数创建新进程。
    2. fork - child_process.fork spawn()的特殊形式。
    3. spawn方法不同的是,fork会在父进程与子进程之间,建立一个通信管道,用于进程之间的通信。

    简单的进程守护(实现)

    ``` var spawn = require(‘child_process’).spawn; var process = require(‘process’);

var p = spawn(‘node’,[‘b.js’],{ detached : true }); console.log(process.pid, p.pid); process.exit(0); ```

其他几种方式

forever

pm2

node/nohub