SVR4 信号的实现包含了函数 signal、sigset、sighold、sigrelse、sigignore 和 sigpause。SVR4 下的 signal 函数与经典的 UNIX V7 信号相同,仅提供不可靠的信号。其他函数确实提供了具有信号处理程序自动重新安装的信号,但不支持系统调用重启。
在 BSD 下,支持函数 signal、sigvec、sigblock、sigsetmask 和 sigpause。所有这些函数都提供可靠的信号,默认情况下支持系统调用重启,但如果程序员愿意,可以禁用该行为。
在 POSIX.1 下,提供了 sigaction、sigprocmask、sigpending 和 sigsuspend。请注意,没有 signal 函数,根据 POSIX.1,它已被弃用。这些函数提供可靠的信号,但 POSIX 未定义系统调用重启行为。如果在 SVR4 和 BSD 下使用 sigaction,默认情况下禁用系统调用重启,但如果信号标志SA_RESTART被指定。
因此,在程序中使用信号的“最佳”方法是使用 sigaction,它允许您显式指定信号处理程序的行为。然而,signal 仍然在许多应用程序中使用,正如我们在上面看到的,signal 在 SVR4 和 BSD 下提供不同的语义。