【发布时间】:2018-03-21 10:35:58
【问题描述】:
我有一个带有信号处理程序的程序:
signal(SIGINT, signalhandler);
然后程序分叉,孩子需要不同的信号处理程序,所以:
pid = fork();
/* What happens here? */
if(pid==0)
{
signal(SIGINT, signalhandler_for_child);
}
那么如果在 fork 之后但在分配新的符号处理程序之前调用 SIGINT 会发生什么?
在孩子获得新的信号处理程序之前,这种情况会发生还是不可能被打断。
如果可能的话。我怎样才能将信号排队给孩子,以便有时间获取新的处理程序?
我知道概率,如果存在的话,肯定几乎是 0,但我想确保应用程序在这方面是健壮的。
【问题讨论】:
-
在分叉前屏蔽所有信号,然后为两者设置适当的掩码?
-
是的,我不知道阻塞信号实际上意味着对它们进行排队。我认为阻塞的信号稍后会被丢弃。谢谢。