我读了一个手册页signal using
男人7信号 http://man7.org/linux/man-pages/man7/signal.7.html我看到两种类型的信号。所以,我有一个问题,
有什么区别POSIX 可靠信号 and POSIX 实时信号在 Linux 中?
如今,最好将这些表述为ordinary信号语义与realtime信号语义。
在一些早期的 UNIX 系统中,信号是不可靠的,因为它们可能会“丢失”,因为没有工具可以阻止信号(使它们保持挂起状态)。例如,即将调用的代码pause()检查后wake_up_flag
如果信号在检查之后但在执行之前到达,则由信号处理程序设置的信号可能会错过唤醒指令。pause()。信号阻断和sigpause() http://man7.org/linux/man-pages/man3/sigpause.3.html是对这种情况的可靠改进。
此外,语义signal()意味着用户定义的信号处理程序在进入处理程序时被重置为 SIG_DFL。那么,通常的技术是立即在信号处理程序内重新安装用户定义的配置。然而,由于信号无法被阻止,这意味着存在竞争条件,程序可以再次发出信号并遭受 SIG_DFL 的后果。在现代系统中,sigaction() http://man7.org/linux/man-pages/man2/sigaction.2.html可靠地解决这种情况。
因此,“可靠”信号就是当今我们大多数人所认为的普通信号语义。 (有关更多信息,我建议UNIX 环境中的高级编程作者:Stephens 和 Rago,特别是第 § 10.4“不可靠信号”)
POSIX 实时信号 http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html#tag_02_04_02在普通信号的基础上添加一些功能,例如,用于应用目的的新信号范围 (SIGRTMIN ... SIGRTMAX)、对待处理信号进行排队的能力以及使用信号传递数据字的能力。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)