发送多个信号时信号处理程序的行为

时间:2014-03-12 18:41:55

标签: c signals

我正在处理一些问题,我有一个处理信号的功能,就像那样:

void sigChld(int noSig)
{
//some action here
}

void F1 () // some child process
{
struct sigaction action;
.... // initialisation of the structure with sigChld as the function handler
sigaction(SIGCHLD, &action, 0);

while(1)
callToFunction();
}

在我的子进程F1中,我将处理程序附加到SIGCHLD到sigChld(),然后我执行callToFunction(),创建另一个进程并进行一些处理。在执行结束时,它向我发送了一个我需要在我的处理程序中处理的SIGCHLD。

现在我的问题是:我需要callToFunction()的返回值,所以我想在做一些操作之前在sigchld的处理程序中使用waitpid。但是如果在waitpid()或动作期间,callToFunction()发送另一个信号呢?当前的处理程序会停止吗?或将继续执行,然后处理下一个信号?

在我的问题中,我需要一个接一个地处理信号,就像我并行执行处理程序一样。

1 个答案:

答案 0 :(得分:0)

我不确定SIGCHLD处理程序中的waitpid()实际上是否有可能被信号中断,因为如果有可用的孩子,它应该立即返回,但一般情况下信号可以在信号处理程序中发生,就像其他任何地方一样。

相关问题