Module signal

Module signal 

Source
Expand description

进程间通讯 - 信号

提供软件中断机制,用于发送异步通知给进程 处理信号的捕获、屏蔽和默认行为.

§信号投递流程

  • 检查: 内核在返回用户态前,检查私有 pending 和共享 pending,找到最高优先级且未被阻塞的信号 S。
  • 投递: 内核将 S 从 pending 队列中移除,构建 S 的上下文,并修改 PC/SP 指向信号处理函数。
  • 返回: 内核退出,任务在用户态执行信号处理函数。
  • 循环: 当信号处理函数执行完毕,通过 rt_sigreturn 返回内核后,内核会再次进入检查流程。 此时,它可能会发现队列中还有第二个未决信号,然后开始第二次单次投递。

Structs§

SignalHandlerTable
信号的动作表 每个进程拥有一个独立的信号处理动作表, 用于存储每个信号的处理函数、屏蔽字和标志。 索引 0 未用,信号编号从 1..=_NSIG
SignalPending
待处理信号结构体

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
检查任务是否有可投递的信号