以下来自信号的手册页
signal() 的行为因 UNIX 版本而异,并且在历史上因 Linux 的不同版本而异。避免使用它:改用 sigaction(2)。请参阅下面的可移植性。
这是否意味着我们应该始终使用sigaction
call 而不是 using signal
?
是的。您已经确定了 Linux 参考,POSIX 也说了同样的话:
sigaction()函数取代了signal()函数,应该优先使用。
sigaction通过强制用户做出有关系统调用中断 (SA_RESTART)、处理程序中断 ( , SA_NODEFER)、子处理 (SA_NOCLD[WAIT|STOP])、处置永久性 (SA_RESETHAND) 等的决定来解决信号中的历史不一致问题。sa_mask