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

时间:2016-09-16 11:44:21

标签: linux signals posix real-time

我正在阅读信号的手册页 man 7 signal我看到两种类型的信号。所以,我有疑问,

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

1 个答案:

答案 0 :(得分:5)

现在,将这些短语称为普通信号语义与实时信号语义可能更好。

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

此外, signal()的语义意味着用户定义的信号处理程序在进入处理程序时被重置为SIG_DFL。通常的技术是立即在信号处理程序中重新安装用户定义的处置。但是,由于无法阻止信号,这意味着存在竞争条件,其中程序可能再次发出信号并遭受SIG_DFL的后果。在现代系统中,sigaction()可靠地解决了这种情况。

因此,“可靠”信号是我们大多数人现在认为的普通信号语义。 (有关更多信息,请参阅Stephens和Rago的 UNIX环境中的高级编程,特别是§10.4“不可靠的信号”)

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