【发布时间】:2016-09-16 11:44:21
【问题描述】:
我使用 signal 阅读了手册页 man 7 signal 我看到两种类型的信号。所以,我有疑问,
Linux中POSIX可靠信号和POSIX实时信号有什么区别?
【问题讨论】:
标签: linux signals posix real-time
我使用 signal 阅读了手册页 man 7 signal 我看到两种类型的信号。所以,我有疑问,
Linux中POSIX可靠信号和POSIX实时信号有什么区别?
【问题讨论】:
标签: linux signals posix real-time
如今,将这些表述为普通信号语义而不是实时信号语义可能会更好。
在一些早期的 UNIX 系统中,信号是不可靠的,因为它们可能会“丢失”,因为没有工具来阻止信号(以保持它们处于未决状态)。例如,如果信号刚刚在检查之后但在 pause( )。信号阻塞和sigpause() 是对这种情况的可靠改进。
此外,signal() 的语义意味着用户定义的信号处理程序在进入处理程序时被重置为 SIG_DFL。因此,通常的技术是立即在信号处理程序中重新安装用户定义的配置。然而,由于信号不能被阻塞,这意味着存在一个竞争条件,在该条件下程序可以再次发出信号并遭受 SIG_DFL 的后果。在现代系统中,sigaction() 可靠地解决了这种情况。
因此,“可靠”信号是我们现在大多数人认为的普通信号语义。 (有关此处的更多信息,我推荐 Stephens 和 Rago 的 UNIX 环境中的高级编程,特别是第 10.4 节“不可靠的信号”)
POSIX realtime signals 在普通信号的基础上添加了一些特性,例如,用于应用目的的新信号范围(SIGRTMIN ... SIGRTMAX)、对待处理信号进行排队的能力,以及使用一个信号。
【讨论】: