首页 文章

杀死父级的所有子进程,但让父级保持活动状态

提问于
浏览
3

什么是杀死父母的所有过程而不是父母的最佳方法?假设我有一个未确定数量的子进程,我已经分叉并且在给定的警报上,在我的信号处理程序中,我想要杀死我的所有子进程但是由于各种原因让自己运行 .

截至目前,我正在使用kill(-1 * parentPid,SIGKILL)但这会杀死我的父母及其子女 .

2 回答

  • 0

    实现此目的的一种方法是提供一些可以捕获的信号(而不是 SIGKILL ) . 然后,安装一个信号处理程序,检测当前进程是否是父进程,如果它不是父进程,则调用 _exit() .

    您可以使用 SIGUSR1SIGUSR2 ,或者可能使用 SIGQUIT .

    我已经说明了这种技术here .

    (可选)(如Lidong所示),父进程可以在发出 kill() 命令之前对信号使用 SIG_IGN .

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

    Jxh的回答很好 . 然而,也许你可以在 fork 之后给每个子进程一个 signal hander 并让它调用 exit 函数 . 然后你给父母一个 signal hander 并让它 ignore 信号(如 SIGUSR1 ) . 这可能会添加代码行,但您不需要检测进程是信号处理函数中的父代或子代 .

相关问题