杀死父进程而不是父进程的最佳方法是什么?假设我有一个不确定数量的子进程,我已经 fork 并在给定的警报中,在我的信号处理程序中,我想杀死我所有的子进程,但由于各种原因让自己继续运行。
截至目前,我正在使用 kill(-1*parentPid, SIGKILL) 但这会杀死我的 parent 及其 child 。
最佳答案
实现此目的的一种方法是传递一些可以捕获的信号(不是 SIGKILL
)。然后,安装一个信号处理程序来检测当前进程是否是父进程,并调用 _exit()
如果不是父进程。
您可以使用 SIGUSR1
或 SIGUSR2
,或者 SIGQUIT
.
我已经说明了这种技术 here .
可选(根据 Lidong 的建议),父进程可以使用 SIG_IGN
在发出 kill()
之前的信号上命令。
signal(SIGQUIT, SIG_IGN);
kill(0, SIGQUIT);
关于c - 杀死父进程的所有子进程但让父进程保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18433585/