Coursebook信号阻塞与sigwait:异步信号安全完全解析
Coursebook信号阻塞与sigwait异步信号安全完全解析【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebookCoursebook 是伊利诺伊大学开源的入门级系统编程教材。本文带你快速掌握三大核心技能用sigprocmask实现信号阻塞、用sigwait同步等待信号以及写出异步信号安全的回调代码——新手也能一次搞懂 Linux 信号处理。 30秒看懂信号生命周期一个信号从产生到处理会经历这几个状态Generated产生→ Pending挂起→ 检查掩码 → Blocked阻塞或 Delivered投递→ Caught捕获或 Killed终止。其中信号掩码signal mask决定了信号能否被投递只要进程内所有线程都阻塞了某个信号它就会一直停留在 Pending 状态——这正是信号阻塞与 sigwait 配合使用的基础。信号常见触发方式默认行为可阻塞/捕获SIGINT (2)CtrlC终止进程✅SIGTERM (15)kill默认终止进程✅SIGSEGV (11)非法内存访问终止并产生 core✅SIGSTOPkill -STOP挂起进程❌SIGKILL (9)kill -9强制终止❌ 教材反复强调优先发 SIGTERM 让进程优雅退出kill -9是最后手段——它不给进程清理临时文件、关闭连接的机会。 信号阻塞用 sigprocmask 给信号踩刹车阻塞信号的核心函数是sigprocmask通过how参数决定如何修改掩码how 参数效果SIG_BLOCK把指定信号加入当前阻塞集合并集SIG_UNBLOCK把指定信号移出阻塞集合SIG_SETMASK用给定集合整体替换阻塞集合⚠️新手最容易踩的坑往信号集里加信号之前必须先初始化集合sigemptyset清空 /sigfillset填满。直接用未初始化的变量再sigaddset是课程书中明确点名的经典错误。还有一个关键结论信号一旦被阻塞用sigaction注册的回调函数就不会被投递除非显式用sigwait去接住它。⏸️ sigwait把异步信号变成排队处理sigwait会阻塞当前线程直到集合中有一个信号变为 Pending然后一次取回一个信号编号。它是同步处理信号的标准姿势回调函数sigaction异步、随时打断你代码受限多sigwait同步、按节奏取可像写普通逻辑一样处理信号。教材推荐的经典模式是专用信号线程在main里先给 SIGINT/SIGTERM 设置阻塞掩码pthread_sigmask之后创建的新线程会继承这份掩码信号无法打断任何工作线程唯一没被阻塞的专用线程循环调用sigwait按switch分支处理信号。这样做还有一个隐藏福利在普通线程里你可以放心调用printf、malloc等常规库函数不必再担心异步信号不安全的问题。为什么需要专用线程因为如果一个信号有多个线程都能接收内核会随机挑选其中一个打断——时序完全不可控。用信号阻塞 sigwait 统一收口行为就可预测了。 异步信号安全回调函数里到底能写什么信号回调是在被中断线程的栈上直接执行的这意味着你的程序可能正好执行到一半被冻结回调运行完才恢复如果回调和主程序使用同一份静态缓冲、互斥锁或内存分配器状态就会互相踩脚——这就是不可重入not re-entrant。✅ 回调里推荐做❌ 回调里避免做置一个volatile sig_atomic_t标志位调用printf、malloc等不可重入函数用write输出一两个字符复杂业务逻辑、内存分配用_exit退出进程依赖共享缓冲 / 复杂锁操作volatile sig_atomic_t这个类型组合有两个作用告诉编译器这个变量会被信号改别优化掉并保证读写是原子的。标准做法就是回调只置标志 → 主循环检查标志 → 主循环里做真正的清理这也是能优雅处理信号连按两次的设计模式。另外请优先用sigaction而非signal注册处理器后者的行为在不同系统上不一致而sigaction语义明确、对线程友好还能配置SA_RESTART等标志。 多进程与多线程场景下的信号传递信号的来源有三类用户按键CtrlC、内核事件如 SIGSEGV、其他进程kill调用。跨场景时有几条必须记住的规则fork子进程继承父进程的掩码和处置表但不继承Pending 状态的信号exec信号处理器被重置为默认动作旧代码可能已不存在只保留掩码多线程处置表是进程级的任何线程调sigaction都对全进程生效掩码是线程级的进程内部可用pthread_kill精确打断指定线程。课程书的建议同样值得新手记住信号适合传轻量事件不要把它当作进程间数据通信的主通道真正的数据交换请使用管道、共享内存等专用 IPC 机制。✅ 新手安全使用信号的 6 步清单选信号优雅退出优先 SIGTERM避免一上来就 SIGKILL先设掩码在创建任何线程之前用pthread_sigmask阻塞 SIGINT/SIGTERM专用线程只让一个线程负责sigwait统一处理信号回调做减法回调里只置volatile sig_atomic_t标志位主循环做加法真正的工作清理、保存、退出放在主循环看到标志之后注册用 sigaction替代语义不一致的signal。 延伸阅读与项目路径本文内容整理自 Coursebook 的 Signals 章节原始资料均位于仓库内资料相对路径信号章节 LaTeX 源码信号阻塞 / sigwait 完整讲解signals/signals.tex信号生命周期矢量图源文件signals/drawings/signal_lifecycle.eps项目说明README.mdLaTeX 构建入口Makefile线程章节源码配合理解信号线程模式threads/threads.tex把信号想成随时可能插队的事件用信号阻塞让它排队、用sigwait有序取出、用标志位替代回调内重活——这三步走完你就拿到了与生产级程序同款的异步信号安全姿势。【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026门店出入库软件怎么选,入库记账出库对账工具

2026门店出入库软件怎么选,入库记账出库对账工具

实体门店库存混乱、账目对不上,大多是出入库工具功能不全导致。手工记账容易出现漏记、错记、库存虚高、成本核算不准等问题,直接影响门店利润统计与备货规划。靠谱的门店出入库软件,需要实现入库登记、出库核销、库存盘点、自动记账、一键对…

2026/10/7 8:07:01 阅读更多 →
2026办公必备企业邮箱推荐,不同规模企业适配攻略

2026办公必备企业邮箱推荐,不同规模企业适配攻略

企业邮箱是企业对外商务对接、内部办公沟通的核心载体,专属域名后缀不仅能提升企业专业形象,更能实现账号统一管控、商务数据安全留存。2026年企业数字化办公持续普及,市面企业邮箱版本繁多、功能与定价差异较大,不同规模企业的账…

2026/10/7 8:07:01 阅读更多 →
第13篇-能力评估算法下-储能空调充电桩可调容量

第13篇-能力评估算法下-储能空调充电桩可调容量

能力评估算法(下):储能 / 空调 / 充电桩可调容量 文章目录 能力评估算法(下):储能 / 空调 / 充电桩可调容量 引言:三类资源,三种"约束语言" 一、储能:功率约束与能量约束必须同时满足 1.1 任务可行性判定:不可行要返回缺口,不能截断 SOC 假装可行 1.2 恒功…

2026/10/7 8:07:01 阅读更多 →

最新新闻

humanizer如何让改写不失真?SFT+DPO+GRPO训练流水线完整拆解(全程不用AI检测器)

humanizer如何让改写不失真?SFT+DPO+GRPO训练流水线完整拆解(全程不用AI检测器)

humanizer如何让改写不失真?SFTDPOGRPO训练流水线完整拆解(全程不用AI检测器) 【免费下载链接】humanizer 项目地址: https://ai.gitcode.com/hf_mirrors/jialinyyzz/humanizer humanizer 是一个 12B 参数的本地 AI 文本改写模型&…

2026/10/7 8:36:19 阅读更多 →
基于RAG技术的校园智能迎新咨询系统设计与实现

基于RAG技术的校园智能迎新咨询系统设计与实现

一、研究背景与意义每年9月迎新季是高校工作的高峰期。据教育部统计,2023年全国普通高校招生录取人数超过1000万人,新生入学咨询量呈爆发式增长。迎新期间,新生及家长关于报到流程、宿舍安排、缴费方式、校园设施、专业培养等问题的咨询量巨大…

2026/10/7 8:36:19 阅读更多 →
华为鸿蒙免费口算练习APP—小羊口算

华为鸿蒙免费口算练习APP—小羊口算

晚饭后孩子摊开口算本,写两道就开始磨铅笔。我去翻口算工具,不是先弹广告,就是把题锁在会员后面——手刚伸出去,兴致就没了。我想做一款打开就能练的:对错马上看见;练到一半被叫去洗碗,回来还能…

2026/10/7 8:36:19 阅读更多 →
WeXPort 微信聊天记录导出攻略指南:6 类职业场景一次讲清

WeXPort 微信聊天记录导出攻略指南:6 类职业场景一次讲清

前言微信聊天记录,对不同职业的人来说,价值完全不一样。微商靠它留客户承诺,法务靠它当证据,财务靠它对账,HR 靠它做交接,内容创作者靠它攒素材,普通打工人靠它留工作记录。但微信记录有一个特点…

2026/10/7 8:36:19 阅读更多 →
好靶场:逻辑漏洞-越权漏洞

好靶场:逻辑漏洞-越权漏洞

⚠️ 免责声明:本文所有操作仅在【好靶场】官方授权的线上安全练习靶场中完成,仅用于网络安全原理学习、技术研究。 严禁将文中Payload、漏洞利用方法应用到任何未获得授权的公网服务器、网站。 未经授权对网站进行渗透测试属于违法行为,一切…

2026/10/7 8:36:19 阅读更多 →
铝电解电容选型设计规范

铝电解电容选型设计规范

前言文档版本:V1.0编制目的:规范铝电解电容器选型、电路设计、降额设计、PCB布局及可靠性验证,明确寿命、纹波电流、温度、反压等关键限制,规避鼓包漏液、容量衰减、ESR上升、爆炸失效等风险。适用范围:直插有极性铝电…

2026/10/7 8:35:19 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 6:26:51 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →