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

linux信号详解

一、信号本质

信号是进程间异步事件通知机制,通过软中断实现。当内核检测到事件(如硬件异常、终端输入、软件条件)时,会向目标进程递送信号12。


二、前台/后台进程信号差异

特性前台进程后台进程
信号接收可接收终端信号(Ctrl+C/Z)需通过kill命令发送信号
控制终端独占输入输出输出重定向到日志文件
示例./server./server &

三、信号产生机制

(一)信号处理函数
  1. signal()函数
    头文件:#include <signal.h>
    原型:void (*signal(int sig, void (*func)(int)))(int);
    返回值:成功返回旧处理函数指针,失败返回SIG_ERR48

  2. sigaction()函数
    结构体定义:

(二)软件条件产生信号
函数作用域信号类型典型用例
kill()跨进程任意信号kill(pid, SIGTERM)
raise()当前进程任意信号raise(SIGUSR1)
abort()当前进程SIGABRT触发核心转储
alarm()定时器SIGALRMalarm(10) 10秒后触发

四、信号保存与阻塞

  1. 内核数据结构

    task_struct { sigset_t blocked; // 阻塞信号集 sigset_t pending; // 未决信号集 struct sigaction[]; // 处理函数数组 }

  2. 信号集操作函数组

    sigset_t set; sigemptyset(&set); // 初始化空集 sigaddset(&set, SIGINT); // 添加信号 sigprocmask(SIG_BLOCK, &set, NULL); // 设置屏蔽


五、信号捕捉流程

  1. 进程执行系统调用进入内核态
  2. 内核检查未决信号并处理
  3. 执行用户注册的处理函数
  4. 通过sigreturn系统调用恢复上下文5354

    // 典型处理函数模板 void handler(int sig) { // 仅使用异步安全函数 char msg[] = "Signal received\n"; write(STDERR_FILENO, msg, sizeof(msg)); _exit(1); // 直接退出避免非可重入问题 }


六、中断与执行态

中断类型触发源处理流程
硬件中断CPU异常/外设保存现场→调用中断服务例程
软件中断系统调用(int 0x80)切换内核态执行服务
信号处理内核信号队列用户态与内核态多次切换

七、可重入函数规范

安全实践‌:

  1. 仅使用局部变量
  2. 不调用malloc/free等非可重入函数
  3. 使用volatile修饰共享标志位3738
     

    volatile sig_atomic_t shutdown_flag; void handler(int sig) { shutdown_flag = 1; }

http://www.lqws.cn/news/65719.html

相关文章:

  • Java正则表达式完全指南
  • Java实现中文姓名转拼音生成用户信息并写入文件
  • Java函数式编程(上)
  • 象棋里的卧槽马、侧面虎、金钩马的方位与解析
  • OpenLayers 地图标注之图文标注
  • [Python] Python中的多重继承
  • 儿童节快乐,聊聊数字的规律和同余原理
  • STM32——CAN总线
  • 助力高校AI教学与科研:GpuGeek推出618算力支持活动
  • Launcher3体系化之路
  • python打卡day42
  • vscode 代理模式(agent mode),简单尝试一下。
  • 02.05、链表求和
  • debian12.9或ubuntu,vagrant离线安装插件vagrant-libvirt,20250601
  • Maven(黑马)
  • mybatis02
  • while循环判断数字位数
  • MobaXterm国内下载与安装使用教程
  • 【位运算】两整数之和(medium)
  • nt!MiDispatchFault函数分析之nt!MiCompleteProtoPteFault函数的作用
  • STM32F407寄存器操作(多通道单ADC+DMA)
  • Android第十一次面试补充篇
  • Python训练营打卡 Day42
  • leetcode0404. 左叶子之和-easy
  • 神经网络-Day42
  • Cesium快速入门到精通系列教程三:添加物体与3D建筑物
  • 【渲染】拆解《三国:谋定天下》场景渲染技术
  • POJO、DTO和VO:Java应用中的三种关键对象详解
  • 每日算法-250601
  • 【C++】多态