
文章目录每日一句正能量一、引言:信号——操作系统与进程对话的语言二、信号类型与默认行为2.1 标准信号(1-31)2.2 实时信号(SIGRTMIN ~ SIGRTMAX)三、信号传递全流程:从产生到交付3.1 信号的产生3.2 信号的挂起与屏蔽3.3 信号的交付四、signal() vs sigaction():为什么生产环境必须用sigaction()4.1 signal() 的历史包袱4.2 sigaction():完整的信号控制4.3 SA_SIGINFO 与 siginfo_t五、信号处理函数执行机制5.1 上下文切换的本质5.2 信号栈与栈溢出防护六、信号集操作与屏蔽字管理6.1 sigset_t 与信号集操作6.2 sigprocmask:进程级信号屏蔽6.3 sigsuspend:原子地等待信号七、实时信号与高级IPC应用7.1 sigqueue:带数据的信号发送7.2 sigwaitinfo:同步等待信号八、信号与线程8.1 信号在线程模型中的行为8.2 多线程程序的信号最佳实践九、异步信号安全函数9.1 为什么printf()在信号处理函数中是危险的?9.2 异步信号安全函数清单9.3 errno的保存与恢复十、信号在IPC中的应用10.1 优雅关闭(SIGTERM)10.2 配置热加载(SIGHUP)10.3 子进程监控(SIGCHLD)十一、总结每日一句正能量“我们累,却无从止歇,我们苦,却无法回避。”成人世界中某种非自主的惯性——责任、生存、欲望推动着我们,即使疲惫痛苦,也常感身不由己。一、引言:信号——操作系统与进程对话的语言在Linux系统中,信号(Signal)是内核向进程传递异步事件通知的核心机制。从用户按下Ctrl+C终止程序,到进程访问非法内存触发段错误,再到子进程结束通知父进程回收资源——这些场景的背后都是信号在发挥作用。理解信号机制,是掌握Linux系统编程的必修课,也是排查"程序莫名崩溃""僵尸进程堆积"等生产问题的关键。本文将从信号的基本概念出发,深入内核源码层面的信号传递流程,对比signal()与sigaction()的本质差异,解析实时信号的排队机制,探讨信号在线程模型中的行为,并给出信号在IPC中的实战应用方案。二、信号类型与默认行为2.1 标准信号(1-31)Linux标准信号继承自传统UNIX,编号1至31,每个信号都有预定义的含义和默认行为。通过kill