默认情况下,Linux 是否遵循 System V 约定并在 SIGIO 上终止?

默认情况下,Linux 是否遵循 System V 约定并在 SIGIO 上终止?

《Unix网络编程》一书中有这样的说法:

我们应该在设置套接字所有者之前建立信号处理程序。在 Berkeley 派生的实现下,两个函数调用的顺序并不重要,因为默认操作是忽略 SIGIO。因此,如果我们颠倒两个函数调用的顺序,那么在调用 fcntl 之后但在调用 signal 之前生成信号的可能性很小;如果发生这种情况,信号就会被丢弃。然而,在SVR4下,SIGIO在标头中被定义为SIGPOLL,并且SIGPOLL的默认操作是终止进程。因此,在 SVR4 下,我们希望在设置套接字所有者之前确定已安装信号处理程序。

在Linux内核的文件中signal.h,引用了System V之后的POSIX行为作为评论

*   +--------------------+------------------+
 *  |  POSIX signal      |  default action  |
 *  +--------------------+------------------+
 *  |  SIGHUP            |  terminate   |
 *  |  SIGINT            |  terminate   |
   ....
 *  |  SIGPROF           |  terminate   |
 *  |  SIGPOLL/SIGIO     |  terminate   |
 *  |  SIGSYS/SIGUNUSED  |  coredump    |
 *  |  SIGSTKFLT         |  terminate   |
   .... etc.

但是,我在源中找不到实际实施该政策的任何地方。似乎没有任何方程式将 SIGIO 设置为等于 SIGPOLL。那么,Linux 遵循 Berkeley 行为还是 System V 行为?

答案1

相关内容