next up previous contents
下一节: 10.2.2 Linux 信号选项 上一层: 10.2 信号处理 前一节: 10.2 信号处理

10.2.1 SVR4、BSD 和 POSIX.1 下的信号

SVR4 信号的实现包含了函数 signalsigsetsigholdsigrelsesigignoresigpause。SVR4 下的 signal 函数与经典的 UNIX V7 信号相同,仅提供不可靠的信号。其他函数确实提供了具有信号处理程序自动重新安装的信号,但不支持系统调用重启。

在 BSD 下,支持函数 signalsigvecsigblocksigsetmasksigpause。所有这些函数都提供可靠的信号,默认情况下支持系统调用重启,但如果程序员愿意,可以禁用该行为。

在 POSIX.1 下,提供了 sigactionsigprocmasksigpendingsigsuspend。请注意,没有 signal 函数,根据 POSIX.1,它已被弃用。这些函数提供可靠的信号,但 POSIX 未定义系统调用重启行为。如果在 SVR4 和 BSD 下使用 sigaction,默认情况下禁用系统调用重启,但如果信号标志SA_RESTART被指定。

因此,在程序中使用信号的“最佳”方法是使用 sigaction,它允许您显式指定信号处理程序的行为。然而,signal 仍然在许多应用程序中使用,正如我们在上面看到的,signal 在 SVR4 和 BSD 下提供不同的语义。



转换于
Fri Mar 29 14:43:04 EST 1996