我使用以下命令阅读了信号的手册页
man 7 signal在这里我看到两种类型的信号。所以,我有一个问题,

在Linux中, POSIX可靠信号 POSIX实时信号有什么区别?

最佳答案

如今,将它们表述为普通信号语义与实时信号语义可能会更好。

在某些早期的UNIX系统中,信号不可靠,因为它们可能会“丢失”,因为没有阻止信号(使信号处于待处理状态)的功能。例如,如果信号刚好在检查之后但在pause()之前到达,则在检查信号处理程序设置的wake_up_flag后将要调用pause()的代码可能会错过唤醒指令。信号阻止和sigpause()是对这种情况的可靠改进。

另外,signal()的语义意味着用户定义的信号处理程序在进入处理程序后将重置为SIG_DFL。因此,通常的技术是立即将用户定义的处置方式重新安装在信号处理器内。但是,由于无法阻止信号,这意味着在竞争状态下,可能会再次发信号通知程序并遭受SIG_DFL的后果。在现代系统中,sigaction()可靠地解决了这种情况。

因此,“可靠的”信号是当今我们大多数人所认为的普通信号语义。 (有关更多信息,我建议由Stephens和Rago在UNIX环境中进行“高级编程”,特别是第10.4节“不可靠的信号”)

POSIX realtime signals在普通信号上添加了一些功能,例如,用于应用目的的新信号范围(SIGRTMIN ... SIGRTMAX),将待处理信号排队的功能以及使用信号传递数据字的功能。

09-16 10:07