Linux 信号机制的数据结构与处理函数解析
1. 信号处理相关标志位说明
在信号处理中,有一些特定的标志位具有不同的含义和作用:
- 当某一位被设置时,信号传递完成后处理程序将被清除,并在该信号后续出现时设置为默认处理程序(SIG_DFL)。
- 处理程序必须在禁用中断的情况下执行。
- 存在一个因历史原因保留的占位标志,新的处理程序不应使用它。
- 有一位仅被 PCI 和 EISA 设备的中断处理程序使用,它表示该处理程序支持中断线共享。
2. 待处理信号队列
每个进程的task_struct中有一个pending指针字段,它指向一个数据结构链表的头部,链表中的每个数据结构代表一个待处理的信号。
2.1 表示待处理队列的数据结构
以下是用于实现待处理信号队列的数据结构,定义在<linux/signal.h>中:
struct sigqueue { struct sigqueue *next; siginfo_t info; }; struct sigpending { struct sigqueue *head, **tail; sigset_t signal; };struct sigqueue:表示一个入队信号的实例。next: