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

Hyp*_*cle 4 c unix process

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

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

jxh*_*jxh 5

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

您可以使用SIGUSR1SIGUSR2,或者也许SIGQUIT

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

可选(根据 Lidong 的建议),父进程可以SIG_IGN在发出kill()命令之前在信号上使用。

signal(SIGQUIT, SIG_IGN);
kill(0, SIGQUIT);
Run Code Online (Sandbox Code Playgroud)