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

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.xdnf.cn/news/10452.html

相关文章:

  • 人工智能100问☞第38问:什么是多模态模型?
  • 【课堂笔记】生成对抗网络 Generative Adversarial Network(GAN)
  • 任务23:创建天气信息大屏Django项目
  • 【BootLoader】之stm32F407实现bootloader相关问题
  • Python+MongoDb使用手册(精简)
  • python打卡day42
  • 学习日记-day20-6.1
  • 【AI论文】推理语言模型的强化学习熵机制
  • Cocos 打包 APK 兼容环境表(Android API Level 10~15)
  • 从线性代数到线性回归——机器学习视角
  • 获取 HTTP 请求从发送到接收响应所花费的总时间
  • 什么是缺页中断(缺页中断详解)
  • 基于微信小程序的垃圾分类系统
  • 西瓜书第十章——聚类
  • 思科设备网络实验
  • 鸿蒙OSUniApp集成WebAssembly实现高性能计算:从入门到实践#三方框架 #Uniapp
  • 开发指南120-表格(el-table)斑马纹
  • 无法运用pytorch环境、改环境路径、隔离环境
  • Python编程基础(二)| 列表简介
  • 【Redis】笔记|第4节|Redis数据安全性分析
  • 数据类型与推断:TypeScript 的基础
  • wordpress免费主题网站
  • ASP.NET Core SignalR 身份认证集成指南(Identity + JWT)
  • Spring Boot,注解,@ConfigurationProperties
  • 手拆STL
  • 【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 时间事件处理部分)
  • Selenium的底层原理
  • 鸿蒙OSUniApp声纹识别与语音验证:打造安全可靠的跨平台语音应用#三方框架 #Uniapp
  • 第14讲、Odoo 18 实现一个Markdown Widget模块
  • 网络攻防技术一:绪论