【发布时间】:2016-01-21 08:21:25
【问题描述】:
为了初始化应用程序,父进程派生出 3 个子进程,然后子进程设置它们的信号处理程序并向父进程发出信号,表明它们已准备好开始活动。 SIGUSR1 信号用于实现这一点。
与此同时,父进程正在等待来自子进程的这些信号。收到信号后,父进程将其 pid 与其存储的子 pid 匹配,并增加一个计数器。一旦父进程知道已收到来自所有子进程的继续信号,它就会开始向每个子进程发送一个 SIGUSR1 信号以指示开始活动。
验证了所有信号都是从父级为每个子级发送的这一事实;但是,大多数情况下,其中一个子进程会错过信号。经过多次试验,我发现父母首先向其发送信号的过程错过了它。然而,有时也会发生所有子进程都错过其信号的情况。我还使用 'strace' 工具检查了所有信号的流向,但似乎仍然无法确定子进程无法捕获父进程发送的信号的原因。
我们将不胜感激。
【问题讨论】:
-
文字描述代码非常模糊,请尝试创建Minimal, Complete, and Verifiable Example 并显示给我们,如果有输出,请同时提供实际和预期的输出。
-
正如 Joachim 所说,有很多事情可能会出错,如果没有 MCVE,我们就不可能为您提供帮助。你怎么知道哪个孩子发出了每个信号?你怎么知道父母已经成功地给每个孩子发送了信号?没有看到代码,我们无法开始猜测这些问题的答案。
-
它本质上是不可靠的 :)