2011-05-23 46 views

回答

3

TLPI

UNIX系统提供的 两种方式改变的信号的配置: signal()sigaction()。 sigaction()系统调用是 替代信号(),用于设置 信号的配置。虽然 sigaction()比signal()更复杂 ,但作为回报, 提供了更大的灵活性。

sigaction也比signal更便携。另外,通过sigaction,您可以指定接收附加参数的信号处理程序(sa_sigactionsa_handler)。

/* can be installed by signal/sigaction */ 
void(*) (int); 

/* can be installed by sigaction only */ 
void(*) (int, siginfo_t *, void *); 
0

从我的观点来看,所不同的(除了接口:)和便携性)是在行为信号被捕获后:

如果配置被设定为一个函数,那么第一任处置重置为SIG_DFL,或信号被阻塞(请参阅下面的可移植性),然后使用参数signum调用处理程序。如果对处理程序的调用导致信号被阻塞,则从处理程序返回时信号将被解除阻塞。

而且,我也想重复相同手册页说:

信号()的行为在UNIX版本的不同而不同,也跨越不同版本的Linux的历史变化。避免使用它:改为使用sigaction(2)。

相关问题