Expand description
进程间通讯 - 信号
提供软件中断机制,用于发送异步通知给进程 处理信号的捕获、屏蔽和默认行为.
§信号投递流程
- 检查: 内核在返回用户态前,检查私有
pending和共享pending,找到最高优先级且未被阻塞的信号 S。 - 投递: 内核将 S 从
pending队列中移除,构建 S 的上下文,并修改 PC/SP 指向信号处理函数。 - 返回: 内核退出,任务在用户态执行信号处理函数。
- 循环: 当信号处理函数执行完毕,通过
rt_sigreturn返回内核后,内核会再次进入检查流程。 此时,它可能会发现队列中还有第二个未决信号,然后开始第二次单次投递。
Structs§
- Signal
Handler Table - 信号的动作表 每个进程拥有一个独立的信号处理动作表, 用于存储每个信号的处理函数、屏蔽字和标志。 索引 0 未用,信号编号从 1..=_NSIG
- Signal
Pending - 待处理信号结构体
Functions§
- check_
signal - 在返回用户态前检查信号并处理
- create_
siginfo_ for_ signal - 为信号创建 siginfo_t 结构体
- do_
sigpending - 获取当前任务的待处理信号集合(私有 + 共享)
- first_
deliverable_ signal - 找出第一个可投递的信号(未被屏蔽且挂起的信号中编号最小的)
- handle_
one_ 🔒signal - install_
user_ 🔒signal_ trap_ frame - 设置信号用户态处理栈帧
- sig_
continue 🔒 - 默认行为:继续进程
- sig_
dump 🔒 - 默认行为:终止并 Core Dump TODO: 实现生成 core dump 的功能
- sig_
ignore 🔒 - 默认行为:忽略信号
- sig_
stop 🔒 - 默认行为:停止进程
- sig_
terminate 🔒 - 默认行为:进程中止
- signal_
from_ 🔒flag - signal_
pending - 检查任务是否有可投递的信号