0

我有这个信号丢失的问题。我的意思是我有这个系统,其中信号由子进程生成并由父进程的其他子进程接收。我已经使用 sigwait 和 sigprocmask 来实际阻塞然后等待信号接收子进程中的信号,而不是注册异步处理程序。

现在当我运行这个系统时。我可以看到,最初,子进程生成的信号被接收子进程阻塞,然后使用 sigwait 他们实际处理这些挂起的信号。因此信号处于待处理状态,然后使用 sigwait 获取,然后继续。

但是随着时间的流逝,我可以看到信号的消耗量不如以前。我的意思是产生了很多信号,并且接收进程没有处理它们。如果我有很多信号未决,是否有可能导致信号丢失?

4

2 回答 2

0

未决信号没有排队,如果您不明确检查或处理它们,这将导致它们丢失。这就是为什么您应该检查所有孩子是否终止。

资料来源:链接到一些旧的讲座材料。

于 2012-09-17T19:10:26.220 回答
0

只有实时信号(介于SIGRTMIN和之间的信号SIGRTMAX),如果您的操作系统支持它们,则保证被排队(最多SIGQUEUE_MAX排队信号)。如果接收进程已经有一个具有相同代码的未决信号,则其他信号可能会丢失。

从规范中sigaction

如果生成了后续出现的未决信号,则取决于实现依赖于在实时信号扩展选项下需要排队的情况之外的情况下是否多次传递或接受信号。

于 2012-09-17T19:12:16.623 回答