【问题标题】:What is the difference between POSIX reliable signals and POSIX real-time signals in Linux?Linux中的POSIX可靠信号和POSIX实时信号有什么区别?
【发布时间】:2016-09-16 11:44:21
【问题描述】:

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

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

【问题讨论】:

    标签: linux signals posix real-time


    【解决方案1】:

    如今,将这些表述为普通信号语义而不是实时信号语义可能会更好。

    在一些早期的 UNIX 系统中,信号是不可靠的,因为它们可能会“丢失”,因为没有工具来阻止信号(以保持它们处于未决状态)。例如,如果信号刚刚在检查之后但在 pause( )。信号阻塞和sigpause() 是对这种情况的可靠改进。

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

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

    POSIX realtime signals 在普通信号的基础上添加了一些特性,例如,用于应用目的的新信号范围(SIGRTMIN ... SIGRTMAX)、对待处理信号进行排队的能力,以及使用一个信号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-05
      • 2012-02-18
      • 1970-01-01
      • 2011-02-04
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      相关资源
      最近更新 更多