为了账号安全,请及时绑定邮箱和手机立即绑定

信号和信号的区别是什么?

信号和信号的区别是什么?

C
慕哥6287543 2019-07-09 10:50:17
信号和信号的区别是什么?我正要在我们这里的一个应用程序中添加一个额外的信号处理程序,我注意到作者使用了sigaction()设置其他信号处理程序。我要用signal()..为了遵循惯例,我应该使用sigaction()但是如果我是白手起家的,我应该选择哪一个呢?
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

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

看这个安全票据关于细节。


查看完整回答
反对 回复 2019-07-09
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

Signal()是标准C,Sigaction()不是。

如果您能够使用任何一种(也就是说,您在POSIX系统上),那么使用Sigaction();它没有指定信号()是否重置处理程序,这意味着要在处理程序中再次调用signal()是可移植的。更糟糕的是,这是一场竞赛:如果您快速地获得两个信号,而第二个信号是在重新安装处理程序之前传递的,那么您将得到默认的操作,这可能会杀死您的进程。σ()另一方面,保证使用“可靠”的信号语义。您不需要重新安装处理程序,因为它永远不会被重置。使用SA_RESTART,您还可以获得一些系统调用来自动重新启动(因此您不必手动检查EINTR)。σ()有更多的选择和可靠,所以它的使用是鼓励的。

Psst.。不要告诉任何人我告诉过您这一点,但是POSIX目前有一个函数bsd_signal(),它的作用类似于signal(),但是给出了BSD语义,这意味着它是可靠的。它的主要用途是移植假定有可靠信号的旧应用程序,POSIX不建议使用它。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 546 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信