sigaction 和 signal的区别是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (339)

我正要在我们这里的一个应用程序中添加一个额外的信号处理程序,我注意使用Sigaction来设置其他信号处理程序。我要使用signal。按照惯例,我应该使用Sigaction,但是如果我从头开始写,我应该选择哪一个呢?

提问于
用户回答回答于

使用sigaction():

signal()接口,它是在C标准中定义的。sigaction()避免-除非您使用显式添加到sigaction()让它忠实地模仿旧的signal()行为。

  1. signal()函数在执行当前处理程序时不(必然)阻止其他信号到达;sigaction()可以阻止其他信号,直到当前处理程序返回为止。
  2. signal()函数(通常)将信号动作重置为SIG_DFL(默认)几乎所有信号。这意味着signal()处理程序必须重新安装自己,作为其第一个操作。它还打开了一个漏洞窗口,从检测信号到重新安装处理程序之间,在此期间,如果信号的第二个实例到达,默认行为(通常会终止,有时会受到损害--也就是核心转储)。
  3. 确切的行为signal()不同的系统不同--而标准允许这些变化。

这些通常都是使用sigaction()而不是signal()但是,sigaction()不可否认的是更微妙。

用户回答回答于

它们是操作系统信号设备的不同接口。如果可能的话,人们应该更喜欢使用Sigaction来发送信号,因为Signal()具有实现定义的(通常是容易发生竞争的)行为,并且在Windows、OSX、Linux和其他UNIX系统上的行为有所不同。

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问6 回答
  • 富有想象力的人

    4 粉丝0 提问6 回答
  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • 发条丶魔灵1

    6 粉丝525 提问4 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励