那么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)。     

要回复问题请先登录注册