【问题标题】:Is sigaction preferred over signal function?sigaction 优先于信号功能吗?
【发布时间】:2021-03-24 05:45:56
【问题描述】:

以下来自signal的手册页

signal() 的行为因 UNIX 版本而异,并且也有所不同 历史上跨越不同版本的 Linux。避免使用它:使用 sigac- 化(2)代替。请参阅下面的可移植性。

这是否意味着我们应该始终使用sigaction 调用而不是使用signal

【问题讨论】:

  • 如果手册页说你应该避免它,那么你应该避免它。它不一定意味着“总是”。最常见的是,当旧例程已被新例程取代时,无需使用旧例程,除非在特殊情况下工作,例如使用新例程不可用的旧系统。为避免signal,只需编写代码以在有选择时使用sigaction。如果没有选择,因为某些事情阻止您使用sigaction 来获得所需的结果,请使用signal

标签: c signals sigaction


【解决方案1】:

是的。您已经确定了 Linux 参考,POSIX says the same thing

sigaction() 函数取代 signal() 函数,应优先使用。

sigaction 通过强制用户做出有关系统调用中断 (SA_RESTART)、处理程序 中断 (@987654322) 的决定来解决 signal 中的历史不一致问题@、SA_NODEFER)、子处理 (SA_NOCLD[WAIT|STOP])、永久处置 (SA_RESETHAND) 等等。

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2018-10-24
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多