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

7
我阅读了使用man 7 signal阅读信号(signal)的手册,其中我看到了两种类型的信号。因此,我有一个问题:
在Linux中,POSIX可靠信号(POSIX reliable signals)POSIX实时信号(POSIX real-time signals)的区别是什么?
1个回答

8
这些天,更好的表述可能是普通信号语义与实时信号语义之间的区别。
在一些早期的UNIX系统中,信号是不可靠的,因为没有阻塞信号的机制(来保持它们挂起)。例如,在检查由信号处理程序设置的wake_up_flag后即将调用pause()的代码可能会错过唤醒指令,如果信号在检查之后但在pause()之前到达。信号阻塞和sigpause()是对这种情况的可靠改进。
此外,signal()的语义意味着用户定义的信号处理程序在进入处理程序时会被重置为SIG_DFL。通常的技术是在信号处理程序内立即重新安装用户定义的处理方式。然而,由于信号无法被阻塞,这意味着存在一种竞争条件,程序可能会再次收到信号并遭受SIG_DFL的影响。在现代系统中,sigaction()可可靠地解决了这种情况。
因此,“可靠”的信号是我们大多数人今天认为的普通信号语义。(有关更多信息,请参见Stephens和Rago的《UNIX环境高级编程》第10.4节“不可靠信号”)

POSIX实时信号相较于普通信号,增加了一些功能,例如,为应用程序提供了一系列新的信号范围(SIGRTMIN…SIGRTMAX),能够排队等待发出的信号,并且可以将数据字传递给接收方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接