【问题标题】:Kill all child processes, but not the parent process杀死所有子进程,但不杀死父进程
【发布时间】:2017-06-27 15:18:40
【问题描述】:

如何在不杀死父进程的情况下杀死所有子进程?我在节点脚本中生成了多个进程,我想杀死所有进程并生成新进程。

现在我找到了一个 terminate npm 库,它会杀死父进程及其所有子进程,但我不想杀死父进程,最好的解决方案是不使用 3rd 方库。

terminate(process.pid, function (err) {
    if (err) {
        console.error("Could not kill processes");
    }
});

【问题讨论】:

标签: node.js linux shell


【解决方案1】:

实现这一点的一种方法是传递一些可以被捕获的信号(不是 SIGKILL)。然后,安装一个信号处理器,检测当前进程是否为父进程,如果不是父进程,则调用_exit()。

您可以使用 SIGUSR1 或 SIGUSR2,或者可能使用 SIGQUIT。

我已经在此处说明了这种技术。

可选(如 Lidong 建议的那样),父进程可以在发出 kill() 命令之前对信号使用 SIG_IGN。

signal(SIGQUIT, SIG_IGN); kill(-parent_pid, SIGQUIT);

【讨论】: