【问题标题】:Nodejs child process and SIGKILLNodejs子进程和SIGKILL
【发布时间】:2019-10-25 14:15:51
【问题描述】:

我正在寻找一种方法来杀死在我的父进程死亡时产生的所有子进程(包括通过接收 SIGKILL)。

PM2 进程管理器似乎拥有密钥,因为向 pm2 守护进程发送 SIGKILL 会导致所有子进程退出(在 Linux 平台上)。

那么你知道 PM2 是如何做到这一点的吗?我怎样才能重现这种行为?

谢谢!

【问题讨论】:

    标签: node.js process signals sigkill


    【解决方案1】:
    'use strict'
    
    const { fork } = require('child_process')
    
    // fork a child process
    const child = fork('new_process.js')
    
    // when the main process exits, send the kill signal to the child process
    process.on('exit', (code) => {
      console.log(`About to exit with code: ${code}`)
      child.kill(9)
    })
    

    有用的文档

    NodeJS - Child Process - kill()

    NodeJS - Process - exit event

    【讨论】:

    • 谢谢!如果我的父进程收到 SIGKILL,有没有办法类似地杀死孩子?
    • 可以指定process.on('SIGKILL', () => { child.kill(); process.exit(); })
    • 可管理信号的其他信息here
    • 进程无法监听 SIGKILL 事件
    • Interestinf info here *.com/questions/30708801/… - 似乎孩子总是会在默认设置下死去