那么';sigaction()和signal()之间的区别是什么?
可能重复:那么';sigaction()和signal()之间的区别是什么?,c,signals,C,Signals,可能重复: 在我看来,它们都可以用于注册特定信号的回调 您如何选择使用哪一个?TLPI UNIX系统提供了两种 更改信号的配置: signal()和sigaction()。这个 sigaction()系统调用是一个 用于设置的信号()的替代方案 信号的处理。虽然 sigaction()稍微复杂一些 要使用than signal(),则返回它 提供更大的灵活性 sigaction也比signal更便于携带。另外,使用sigaction可以指定接收附加参数的信号处理程序(sa_sigaction与
在我看来,它们都可以用于注册特定信号的回调 您如何选择使用哪一个?TLPI UNIX系统提供了两种 更改信号的配置:
signal()
和sigaction()
。这个
sigaction()系统调用是一个
用于设置的信号()的替代方案
信号的处理。虽然
sigaction()稍微复杂一些
要使用than signal(),则返回它
提供更大的灵活性
sigaction
也比signal
更便于携带。另外,使用sigaction
可以指定接收附加参数的信号处理程序(sa_sigaction
与sa_处理程序
)
TLPI
UNIX系统提供了两种
更改信号的配置:
signal()
和sigaction()
。这个
sigaction()系统调用是一个
用于设置的信号()的替代方案
信号的处理。虽然
sigaction()稍微复杂一些
要使用than signal(),则返回它
提供更大的灵活性
sigaction
也比signal
更便于携带。另外,使用sigaction
可以指定接收附加参数的信号处理程序(sa_sigaction
与sa_处理程序
)
在我看来,区别(除了接口:)和可移植性)在于信号被捕获后的行为: 如果将配置设置为函数,则首先要么将配置重置为SIG_DFL,要么阻止信号(请参见下面的可移植性),然后使用参数signum调用处理程序。如果对处理程序的调用导致信号被阻塞,那么从处理程序返回时信号将被解除阻塞 另外,我想重复一下手册上的内容: signal()的行为在不同的Unix版本中有所不同,在不同的Linux版本中历史上也有所不同。避免使用:改用sigaction(2)
在我看来,区别(除了接口:)和可移植性)在于信号被捕获后的行为: 如果将配置设置为函数,则首先要么将配置重置为SIG_DFL,要么阻止信号(请参见下面的可移植性),然后使用参数signum调用处理程序。如果对处理程序的调用导致信号被阻塞,那么从处理程序返回时信号将被解除阻塞 另外,我想重复一下手册上的内容: signal()的行为在不同的Unix版本中有所不同,在不同的Linux版本中历史上也有所不同。避免使用:改用sigaction(2) ..
/* can be installed by signal / sigaction */
void(*) (int);
/* can be installed by sigaction only */
void(*) (int, siginfo_t *, void *);