当前位置: 首页 > news >正文

Linux信号的保存

Linux系统中信号的保存涉及内核为每个进程维护的数据结构,确保信号在产生后、处理前被正确记录和管理。以下是详细的解释:

1. 信号的基本概念

  • 信号(Signal):用于通知进程发生了特定事件的异步通知机制,如SIGINT(Ctrl+C终止进程)、SIGTERM(终止请求)等。
  • 信号处理方式:进程可为每个信号指定处理方式——默认(如终止)、忽略或自定义处理函数。

2. 信号的保存结构

  • 待处理信号集(Pending Signals):记录已产生但尚未递送给进程的信号。由内核通过以下结构管理:
    • 标准信号(1-31):使用位掩码(每个信号对应一个位)记录是否发生。多次触发同一信号时,仅记录一次(不排队)。
    • 实时信号(34-64):使用队列保存,确保多次触发时每个信号实例均被记录。
  • 阻塞信号集(Blocked Signals):通过信号掩码(Signal Mask)标记被阻塞的信号。阻塞的信号会停留在待处理集中,直到解除阻塞。

3. 关键数据结构

  • 进程描述符(task_struct:内核为每个进程维护的结构,包含:
    • struct sigpending pending:待处理信号集合。
      • sigset_t signal:标准信号的位掩码。
      • struct list_head list:实时信号的队列。
    • sigset_t blocked:阻塞信号掩码。
    • struct sigaction sigaction[NSIG]:信号处理函数表。

4. 信号递送流程

  1. 信号产生:通过kill()、终端输入或硬件异常等方式触发。
  2. 内核检查阻塞状态
    - 若信号未被阻塞,立即递送(调用处理函数或执行默认操作)。
    - 若被阻塞,信号被添加到pending集合(标准信号置位,实时信号入队)。
  3. 解除阻塞时处理
    - 当进程调用sigprocmask()解除阻塞或从系统调用返回时,内核检查pending集合,递送未阻塞的信号。
  4. 处理顺序
    - 标准信号:按信号编号从小到大处理。
    - 实时信号:按发送顺序处理(队列先进先出)。

5. 信号处理期间的阻塞

  • 默认情况下,进程执行信号处理函数时,自动阻塞当前信号,防止递归调用。
  • 可通过sigaction()sa_mask字段指定额外阻塞的信号,确保处理函数原子性。

6. 示例场景

  • 场景1:进程阻塞SIGINT(Ctrl+C):
    • 用户多次按下Ctrl+C,SIGINT被标记在pending中(仅一次)。
    • 解除阻塞后,进程处理一次SIGINT
  • 场景2:发送实时信号SIGRTMIN多次:
    • 每次发送均入队,解除阻塞后按顺序处理所有实例。

7. 注意事项

  • 信号丢失:标准信号不排队,频繁触发可能导致丢失。
  • 可重入性:信号处理函数应使用异步安全函数(如write()),避免死锁或数据损坏。
  • 系统调用中断:信号可能中断阻塞的系统调用(如read()),需检查EINTR错误并重试。

总结

Linux通过pending集合和blocked掩码管理信号保存,标准信号与实时信号分别采用位图和队列实现不同语义。理解这些机制有助于编写健壮的信号处理代码,避免竞态条件和信号丢失。

相关文章:

  • 裸金属服务器和云服务器之间的差别
  • Dify中使用插件LocalAI配置模型供应商报错
  • [Java][Leetcode middle] 238. 除自身以外数组的乘积
  • 挖o心得(1)
  • BUFDS_GTE2,IBUFDS,BUFG缓冲的区别
  • 技术解码 | 腾讯云SRT弱网优化
  • Vue3 加快页面加载速度 使用CDN外部库的加载 提升页面打开速度 服务器分发
  • sqli-labs靶场23-28a关(过滤)
  • WHAT - 缓存命中 Cache Hit 和缓存未命中 Cache Miss
  • 掌握HTML文件上传:从基础到高级技巧
  • 我设计的一个安全的 web 系统用户密码管理流程
  • 国芯思辰| 轮速传感器AH741对标TLE7471应用于汽车车轮速度感应
  • 【Python-Day 14】玩转Python字典(上篇):从零开始学习创建、访问与操作
  • 【CPT】可重复性
  • C++(15):默认值(default)
  • UI自动化测试详解
  • 开源鸿蒙北向源码开发: 5.0kit化相关sdk编译
  • 【Win32 API】 lstrcpyA()
  • 中国 MRO 的市场概况及发展趋势
  • vscode debug node + 前端
  • 烤肉店从泔水桶内捞出肉串再烤?西安未央区市监局:停业整顿
  • 上交所五方面落实募资新规:强化关键少数责任和股东权利保障
  • 刘晓庆被实名举报涉嫌偷税漏税,税务部门启动调查
  • 国台办:实现祖国完全统一是大势所趋、大义所在、民心所向
  • 阿尔巴尼亚执政党连续第四次赢得议会选举,反对党此前雇用特朗普竞选经理
  • 足球少年郎7月试锋芒,明日之星冠军杯构建顶级青少年赛事