答案 0 :(得分:4)
TLPI
UNIX系统提供两种方式 改变信号的配置:
signal()
和sigaction()
。该 sigaction()系统调用是一个 用于设置的signal()的替代方案 信号的配置。虽然 sigaction()有点复杂 使用比信号(),作为回报 提供更大的灵活性。
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 *);
答案 1 :(得分:0)
从我的观点来看,差异(除了接口:)和可移植性)是在信号被捕获后的行为:
如果处置设置为函数,则首先将处置重置为SIG_DFL,或者阻止信号(参见下面的可移植性),然后使用参数signum调用处理程序。如果调用处理程序导致信号被阻塞,则从处理程序返回时信号将被解除阻塞。
而且,我也想重复一遍,就像手册页上说的那样:
signal()的行为在Unix版本中有所不同,并且在不同版本的Linux中也有不同的历史变化。避免使用:改为使用sigaction(2)。