如何解决那么sigaction和signal有什么区别? [重复]
| 这个问题已经在这里有了答案:解决方法
TLPI
UNIX系统提供两种方式
改变信号的配置:
signal()
和sigaction()
。的
sigaction()系统调用是
替代signal()进行设置
信号的处置。虽然
sigaction()有点复杂
使用比signal()更高的回报
提供更大的灵活性。
sigaction
也比ѭ3portable更便携。同样,使用sigaction
,您可以指定接收附加参数的信号处理程序(sa_sigaction
与sa_handler
)。
/* can be installed by signal / sigaction */
void(*) (int);
/* can be installed by sigaction only */
void(*) (int,siginfo_t *,void *);
,从我的角度来看,区别(接口:除外)和可移植性)在于捕获信号后的行为:
如果将处置设置为函数,则首先将处置重置为SIG_DFL,或者阻止信号(请参见下面的可移植性),然后使用参数signum调用处理程序。如果调用处理程序导致信号被阻塞,则从处理程序返回后,信号将被解除阻塞。
而且,我也想重复一下手册页所说的内容:
signal()的行为在Unix版本之间有所不同,并且在不同Linux版本之间历史上也有所不同。避免使用它:改为使用sigaction(2)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。