news 2026/1/5 22:43:37

在POSIX标准中的信号

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在POSIX标准中的信号

在POSIX标准中,信号是用于进程间通信、中断处理及事件通知的核心机制,定义了进程对特定事件的响应行为。以下从定义、分类、常见信号及处理机制四方面系统解析:

1. 定义与标准背景

  • POSIX信号:遵循IEEE 1003(ISO/IEC 9945)标准,确保跨UNIX-like系统的可移植性。Linux虽未正式认证,但实现了大部分POSIX信号规范。
  • 核心功能:异步通知进程特定事件(如用户中断、子进程终止、硬件异常等),支持进程通过信号处理函数自定义响应。

2. 信号分类

  • 按可靠性
    • 不可靠信号(1-31):早期UNIX设计,可能丢失(如SIGINT、SIGQUIT)。Linux通过内核优化减少丢失,但理论仍存在风险。
    • 可靠信号(32-63):实时信号(SIGRTMIN-SIGRTMAX),支持排队,避免丢失,适用于高精度同步。
  • 按行为
    • 终止类(Term):默认终止进程(如SIGKILL、SIGTERM)。
    • 核心转储类(Core):终止进程并生成内存快照(如SIGSEGV、SIGABRT)。
    • 暂停/继续类(Stop/Cont):暂停(SIGSTOP)或恢复(SIGCONT)进程。
    • 忽略类(Ign):默认忽略(如SIGCHLD、SIGURG)。

3. 常见信号及默认行为

信号名默认行为含义与场景
SIGHUP1Term控制终端挂起或进程死亡(如SSH断开)
SIGINT2Term键盘中断(Ctrl+C)
SIGQUIT3Core终端退出(Ctrl+\),生成核心转储
SIGKILL9Term强制终止进程(不可捕获/忽略)
SIGSTOP17Stop暂停进程(不可捕获/忽略)
SIGCHLD17/18Ign子进程终止/暂停(父进程默认忽略)
SIGALRM14Term定时器超时(如alarm()设置)
SIGSEGV11Core非法内存访问(段错误)
SIGPIPE13Term向无读端的管道/Socket写入数据
SIGUSR1/210/12Term用户自定义信号(可自定义处理)

4. 信号处理机制

  • 处理函数设置
    • signal():早期函数,设置信号捕获、忽略或默认行为(如signal(SIGINT, SIG_IGN)忽略中断)。
    • sigaction():POSIX推荐函数,支持更精细控制(如信号掩码、重启系统调用)。
  • 关键规则
    • 不可捕获/忽略:SIGKILL、SIGSTOP无法被程序干预。
    • 信号排队:可靠信号支持排队,不可靠信号可能丢失。
    • 系统调用中断:进程在阻塞系统调用(如read、accept)时收到信号,默认返回EINTR错误,需手动重启或处理。
  • 子进程僵死处理:父进程捕获SIGCHLD后,需通过waitpid()循环清理终止的子进程,避免资源泄漏。

5. 实际应用示例

  • 进程间同步:使用POSIX有名/无名信号量(如sem_wait、sem_post)实现线程/进程互斥。
  • 网络编程:处理SIGPIPE(忽略以避免断开连接时进程终止)、SIGURG(Socket紧急数据通知)。
  • 作业控制:通过SIGTSTP(Ctrl+Z)、SIGCONT控制进程暂停/恢复。

总结:POSIX信号是UNIX-like系统事件驱动的核心,理解其分类、默认行为及处理机制,对编写健壮的进程管理、网络服务及系统程序至关重要。需注意不同信号的不可变性(如SIGKILL)及实时信号的可靠性优势,结合sigaction等函数实现精准控制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/5 8:15:57

【消息队列项目】客户端搭建与测试

目录 一.广播交换模式下的测试 1.1.生产者消费者代码编写 1.2.测试 二.直接交换模式下的测试 2.1.生产者消费者代码编写 2.2.测试 三.主题交换模式下的测试 3.1.生产者消费者代码编写 3.2.测试 搭建客户端 发布消息的生产者客户端订阅消息的消费者客户端 思想 必须…

作者头像 李华
网站建设 2026/1/5 12:54:22

diskinfo工具监测SSD寿命:保障GPU服务器稳定运行

diskinfo工具监测SSD寿命:保障GPU服务器稳定运行 在现代人工智能基础设施中,GPU服务器早已不再是单纯的“算力盒子”——它是一个集计算、存储与网络于一体的复杂系统。尤其当深度学习模型规模不断膨胀,训练任务动辄持续数天甚至数周时&#…

作者头像 李华
网站建设 2026/1/4 3:15:24

JiyuTrainer支持LoRA微调:适配大模型token高效训练

JiyuTrainer支持LoRA微调:适配大模型token高效训练 在当前大语言模型(LLMs)快速演进的背景下,越来越多的企业和研究者希望基于预训练模型进行定制化微调,以满足垂直领域任务的需求。然而,动辄数十亿甚至上百…

作者头像 李华
网站建设 2026/1/5 13:24:09

【课程设计/毕业设计】基于SpringBoot的学生成绩管理系统的设计与实现基于springBoot的高校学生绩点管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/1/3 14:26:26

VTKWithNumpy使用 NumPy 数组来创建3D体渲染所需要的数据

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtk与numpy数组的联动,②vtkI…

作者头像 李华
网站建设 2026/1/5 3:24:01

PyTorch-CUDA-v2.8镜像日志轮转策略防止磁盘占满

PyTorch-CUDA-v2.8镜像日志轮转策略防止磁盘占满 在深度学习工程实践中,一个看似微不足道的运维细节——日志管理,往往成为压垮长期运行训练任务的最后一根稻草。我们见过太多这样的场景:模型正在收敛的关键阶段,容器突然因“磁盘…

作者头像 李华