可能重复:
What is the difference between sigaction and signal?那么sigaction()和signal()之间有什么区别?
在我看来,他们两个可以用来注册回调特定信号。
你如何选择使用哪一个?
可能重复:
What is the difference between sigaction and signal?那么sigaction()和signal()之间有什么区别?
在我看来,他们两个可以用来注册回调特定信号。
你如何选择使用哪一个?
TLPI
UNIX系统提供的 两种方式改变的信号的配置:
signal()
和sigaction()
。 sigaction()系统调用是 替代信号(),用于设置 信号的配置。虽然 sigaction()比signal()更复杂 ,但作为回报, 提供了更大的灵活性。
sigaction
也比signal
更便携。另外,通过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调用处理程序。如果对处理程序的调用导致信号被阻塞,则从处理程序返回时信号将被解除阻塞。
而且,我也想重复相同手册页说:
信号()的行为在UNIX版本的不同而不同,也跨越不同版本的Linux的历史变化。避免使用它:改为使用sigaction(2)。
[This](http://stackoverflow.com/questions/231912/what-is-the-difference-between-sigaction-and-signal)。 – jmkeyes 2011-05-23 07:52:23