凡亿教育-大康
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | ​ 一文简述Linux系统的Signal(信号)
​ 一文简述Linux系统的Signal(信号)

在Linux系统中,信号(Signal)作为进程间异步通信的核心机制,如同精密齿轮般驱动着进程控制欲系统调度的运作,它通过软中断实现事件的快速响应,是理解进程行为与系统资源管理的关键切入点。

1.png

1、信号本质与分类

软中断属性:信号本质是内核或进程发送的软中断,用于通知进程特定事件(如硬件异常、用户指令、子进程状态变更)。

类型划分:标准信号(1-31)如SIGINT(Ctrl+C触发)、SIGTERM(终止进程),以及实时信号(34-64)支持排队机制,避免丢失。

不可靠信号:非实时信号可能因多次触发被覆盖,需通过sigaction()设置可靠处理。

2、信号处理机制

处理方式三选一:进程可指定自定义处理函数、忽略信号或执行默认动作(如SIGKILL强制终止,无法捕获)。

注册与发送:通过signal()/sigaction()注册处理函数,kill()系统调用或终端指令(如kill -9 PID)发送信号。

执行上下文:信号处理函数执行时,进程会中断当前操作;慢速系统调用(如sleep)可被信号打断,需注意竞态条件防护。

3、关键信号与系统调度

进程控制链:SIGSTOP暂停进程,SIGCONT恢复执行;SIGCHLD在子进程退出时通知父进程,避免僵尸进程堆积。

异常处理:SIGSEGV(非法内存访问)、SIGFPE(浮点异常)由硬件异常触发,内核将其转化为信号通知进程。

定时任务:alarm()设置SIGALRM定时信号,常用于周期性任务调度或超时控制。

4、信号设计注意事项

可靠性限制:相同信号的快速连续发送可能导致丢失,实时信号需优先用于关键场景。

阻塞与排队:通过sigprocmask()设置信号屏蔽字,控制信号递送时机;阻塞信号可排队等待处理。

并发安全:避免在信号处理函数中执行复杂操作(如内存分配),防止重入问题;使用原子变量或标志位传递状态。


本文凡亿教育原创文章,转载请注明来源!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论