【问题标题】:behaviour of signal handler when multiple signals are sent发送多个信号时信号处理程序的行为
【发布时间】:2023-03-23 10:40:02
【问题描述】:

我正在处理一些问题,我有一个处理信号的函数,就像这样:

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() 发送另一个信号怎么办?当前的处理程序会停止吗?还是会继续执行,然后处理下一个信号?

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

【问题讨论】:

    标签: c signals


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2015-06-15
      • 2023-03-30
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多