问题描述
|
这个问题已经在这里有了答案:
解决方法
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)。