信号和事件之间的关联是如何创建、删除、修改、启用和禁用的?

信号和事件之间的关联是如何创建、删除、修改、启用和禁用的?

在Linux中,当一些相关事件发生时,会生成许多信号。

  • 信号和事件之间的关联是如何创建、删除、修改、启用和禁用的? (最好是API方面)

  • 有内核使用的信号和用户定义的信号,它们的处理方式是否不同?

答案1

“可靠”和“实时”信号生成、传递和默认处理都是由 POSIX 指定。该规范定义了哪些事件生成哪些信号。 Linux添加一些信号对应于其他 Unix 系统的传统信号。如果您想要添加、删除或修改事件和信号之间的关联,则必须在操作系统中实现它,然后向 Austin Group(编写 POSIX 的地方)提出您的案例。

可用于控制信号生成、传输和处理的 API 非常广泛,请参阅上面的链接了解详细信息。其中一些控制如何处理信号(默认操作、忽略或特定处理程序),但无法控制事件和信号本身之间的关联。因此,浮点异常总是会导致SIGFPE,这可以通过不同的方式处理;在其他情况下,进程SIGFPE也可以手动发出问题,但浮点异常与SIGFPE无法禁用之间的连接。

一些可靠的信号是为用户定义的目的而设计的,SIGUSR1并且SIGUSR2。没有与这些信号对应的预先建立的事件,但是有预先建立的动作(终止接收进程)。由生成过程来确定哪些事件导致生成这些信号之一;没有办法告诉内核在某些情况下自动生成这样的信号。 (BPF 程序可以发送信号,因此信号生成代码可以托管在内核中,但这并不完全相同。)

实时信号都是用户定义的。与用户定义的可靠信号一样,它们默认终止接收过程。

你的第二个问题已经在是什么原因导致发送各种信号?

相关内容