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

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

我正要在我们这里的一个应用程序中添加一个额外的信号处理程序,我注意到作者使用了sigaction()设置其他信号处理程序。我要用signal()..为了遵循惯例,我应该使用sigaction()但是如果我是白手起家的,我应该选择哪一个呢?



慕哥6287543
浏览 547回答 3
3回答

精慕HU

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

一只甜甜圈

Signal()是标准C,Sigaction()不是。如果您能够使用任何一种(也就是说,您在POSIX系统上),那么使用Sigaction();它没有指定信号()是否重置处理程序,这意味着要在处理程序中再次调用signal()是可移植的。更糟糕的是,这是一场竞赛:如果您快速地获得两个信号,而第二个信号是在重新安装处理程序之前传递的,那么您将得到默认的操作,这可能会杀死您的进程。σ()另一方面,保证使用“可靠”的信号语义。您不需要重新安装处理程序,因为它永远不会被重置。使用SA_RESTART,您还可以获得一些系统调用来自动重新启动(因此您不必手动检查EINTR)。σ()有更多的选择和可靠,所以它的使用是鼓励的。Psst.。不要告诉任何人我告诉过您这一点,但是POSIX目前有一个函数bsd_signal(),它的作用类似于signal(),但是给出了BSD语义,这意味着它是可靠的。它的主要用途是移植假定有可靠信号的旧应用程序,POSIX不建议使用它。
打开App,查看更多内容
随时随地看视频慕课网APP