sigaction 是否优于信号功能?

Is sigaction preferred over signal function?

以下内容来自 signal

的手册页

The behavior of signal() varies across UNIX versions, and has also varied historically across different versions of Linux. Avoid its use: use sigac‐ tion(2) instead. See Portability below.

这是否意味着我们应该始终使用 sigaction 调用而不是使用 signal

是的。您已经确定了 Linux 引用,并且 POSIX says the same thing:

The sigaction() function supersedes the signal() function, and should be used in preference.

sigaction 通过强制用户做出有关系统调用中断的决定 (SA_RESTART) 来解决 signal 中的历史不一致问题, handler中断(sa_mask,SA_NODEFER),子处理(SA_NOCLD[WAIT|STOP]),处理持久化(SA_RESETHAND) , 等等。