那么sigaction()和signal()之间的区别是什么?

时间:2011-05-23 07:47:34

标签: c signals

  

可能重复:
  What is the difference between sigaction and signal?

在我看来,它们都可用于注册特定信号的回调。

您如何选择使用哪一个?

2 个答案:

答案 0 :(得分:4)

TLPI

  

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

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 *);

答案 1 :(得分:0)

从我的观点来看,差异(除了接口:)和可移植性)是在信号被捕获后的行为:

  

如果处置设置为函数,则首先将处置重置为SIG_DFL,或者阻止信号(参见下面的可移植性),然后使用参数signum调用处理程序。如果调用处理程序导致信号被阻塞,则从处理程序返回时信号将被解除阻塞。

而且,我也想重复一遍,就像手册页上说的那样:

  

signal()的行为在Unix版本中有所不同,并且在不同版本的Linux中也有不同的历史变化。避免使用:改为使用sigaction(2)。