2013-08-25 36 views
3

杀死父级的所有进程但不是父级的最佳方法是什么?比方说,我有一个未定数的子进程,我已经分叉并且在给定的报警中,在我的信号处理程序中,我想要杀死所有子进程,但由于各种原因保持自己运行。截至目前,我正在使用kill(-1 * parentPid,SIGKILL),但这会杀死我的父母及其子女。杀死父级的所有子进程但离开父级活动

+0

你可以简单地跟踪孩子的PIDs在一个简单的数组,当你叉他们? – user4815162342

+0

我试过,但由于被分叉进程的量是不知道,我必须保持多少已经取得了柜台,以便正确地对其进行索引和计数器变量的状态不是很好在多个流程定义。 ..当然,我的执行可能很差。 –

+0

所以你可以发送一个信号给父母和孩子,对吗? –

回答

3

完成此操作的一种方法是发送一些可以捕获的信号(而不是SIGKILL)。然后,安装一个信号处理程序,检测当前进程是否为父进程,如果不是父进程,则调用_exit()

您可以使用SIGUSR1SIGUSR2或者SIGQUIT

我已经说明了这种技术here

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

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

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

+3

嗨李东,一个小例子会走很久方式来说明应该做什么=) – puk

相关问题