【问题标题】:Sigaction vs Signal信号与信号
【发布时间】:2015-08-19 19:50:28
【问题描述】:
谁能解释一下sigaction和signal之间的区别。我知道它们的信号工作方式不同,具体取决于您正在使用的机器,即 Mac、Windows 或 Linux,并且 sigaction 在所有平台上的工作方式都相同。但我的问题是为什么会这样,因为我尝试在不同平台上使用信号并得到相同的结果。另外,你们会推荐使用哪一个来进行更好的练习。
【问题讨论】:
标签:
shell
signals
system-calls
sigaction
【解决方案1】:
我对@987654321@ 和signal 知之甚少。但我知道的是:
-
sigaction call 比 signal call 使用起来更复杂(你已经知道了)。
-
sigaction允许您获取有关程序接收到的信号的更多信息(参见siginfo_t 结构)。
- 根据 Michael KERRISK 的书:“Linux 编程接口”(第 22 章,第 456 页):“...始终使用
sigaction,而不是 signal 来建立信号处理程序。”
- 最后(再次来自 Michael KERRISK 的书中):“Linux 内核包含
signal 作为系统调用的实现,此实现提供了较旧的、不可靠的语义。但是,glibc 通过提供信号库绕过了此系统调用调用sigaction"的函数
希望对你有帮助。