Linux信号机制:进程间高效传递事件与操控指令的桥梁

news2024/12/28 5:44:53

在Linux操作系统中,信号是一种进程间通信机制,用于通知进程某些事件的发生或请求进程执行特定的动作。信号分为两类:编号1至31的传统UNIX信号,被称为不可靠信号,以及编号32至63的扩展信号,即可靠信号(实时信号)。不可靠信号的特点在于无法排队处理,可能导致信号丢失,而可靠信号支持信号队列,确保信号能够被正确送达。

针对编号小于SIGRTMIN的传统不可靠信号,以下是部分重要信号的详细介绍:

SIGHUP(Hangup)

当用户终端连接断开时(无论是正常关闭还是异常中断),系统会向同一session内的所有作业发送此信号。这意味着当用户退出Linux登录时,属于该session的前台进程组和具有终端输出的后台进程都会接收到SIGHUP,预设行为是终止进程。然而,一些程序如wget可以捕获并忽略此信号,以便在用户登出后继续运行。此外,SIGHUP还可用于通知与终端分离的守护进程重新加载配置文件。

SIGINT(Interrupt)

作为程序终止信号,SIGINT通常由用户按下键盘组合Ctrl+C触发,旨在通知前台进程组结束其执行。

SIGQUIT(Quit)

与SIGINT类似,SIGQUIT通过键入QUIT字符(通常是Ctrl+/)引发,接收该信号的进程不仅会被终止,而且还会生成core文件,如同程序遇到严重错误时的情况。

SIGILL(Illegal instruction)

当进程执行非法指令时发出,这可能是由于可执行文件错误或尝试执行数据段,堆栈溢出也可能导致该信号。

SIGTRAP(Trap)

调试器使用的信号,通常由断点或其他陷阱指令生成。

SIGABRT(Aborted)

调用abort函数时产生的信号,标志着进程主动请求异常终止。

SIGBUS(Bus error)

因非法地址访问或内存地址对齐错误引发的信号,不同于SIGSEGV,后者源于对合法内存区域的非法访问。

SIGFPE(Floating point exception)

在发生严重的算术运算错误时发出,包括但不限于浮点运算错误、溢出以及除数为零等情况。

SIGKILL(Killed)

这是一个强制终结进程的信号,无法被阻止、处理或忽略,常用于在常规手段无法终止进程时强行结束其运行。

SIGUSR1 & SIGUSR2(User signal 1 & 2)

这两者均为预留信号,供用户自定义功能。

SIGSEGV(Segmentation fault)

进程试图访问未分配给它的内存,或是尝试向无权限的内存地址写入数据时产生的信号。

SIGPIPE(Broken pipe)

当进程尝试向已关闭的管道或套接字写入数据时,会接收到此信号,表明管道已破裂。

SIGALRM(Alarm clock)

定时信号,与实际或时钟时间相关联,由alarm函数设置和使用。

SIGTERM(Terminated)

程序终止信号,相较于SIGKILL,SIGTERM允许被阻塞和处理。它是系统或用户请求进程正常退出的标准方式,kill命令默认发送的就是这个信号。

SIGCHLD(Child exited)

当子进程终止时,父进程会收到此信号。若父进程未恰当处理此信号,子进程虽已终止但仍可能存在于内核进程表中,成为所谓的僵尸进程。应通过忽略、捕获或wait子进程等方式避免这种情况。

SIGCONT(Continue)

用于恢复已停止(stopped)进程的执行,此信号不可被阻塞。

SIGSTOP & SIGTSTP

两者分别用于立即无条件停止进程执行(不可被捕获、忽略或阻塞)和以可控制方式停止进程(可以被捕获或忽略)。SIGTSTP通常由用户按下Ctrl+Z触发。

其余信号如SIGTTIN、SIGTTOU、SIGURG、SIGXCPU、SIGXFSZ、SIGVTALRM、SIGPROF、SIGWINCH、SIGIO、SIGPWR、SIGSYS各自对应着不同类型的事件,如终端交互、资源限制超限、窗口大小变化、异步I/O就绪等。

值得注意的是,其中有几种特殊信号的行为不可更改或具有特别的效果:

  • 不可被捕获、阻塞或忽略的信号包括SIGKILL和SIGSTOP;
  • 不可恢复至默认动作的信号有SIGILL、SIGTRAP等;
  • 默认会导致进程异常终止(abort或core dump)的信号包括SIGABRT、SIGBUS、SIGFPE等;
  • 默认会导致进程正常退出的信号有SIGALRM、SIGHUP、SIGINT等;
  • 默认会导致进程停止(而非终止)的信号有SIGSTOP、SIGTSTP等;
  • 默认被进程忽略的信号有SIGCHLD、SIGURG、SIGWINCH等。

最后,不同系统对某些信号的默认处理可能有所不同,如SIGIO在SVR4和4.3BSD系统中的表现就有差异。

粉丝福利, 免费领取C/C++ 开发学习资料包、技术视频/项目代码,1000道大厂面试题,内容包括(C++基础,网络编程,数据库,中间件,后端开发/音视频开发/Qt开发/游戏开发/Linuxn内核等进阶学习资料和最佳学习路线)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMU15/445 2023 Spring-project1 LRU-K 替换策略

在写个demo之前,专门学习了LRU:【LeetCode刷题】146. LRU 缓存-CSDN博客 使用哈希表 双向链表可以满足删除/增加的时间复杂度为O(1)。 在通读完15/445这块的说明之后,发现和LRU还是有些差别的。 官方文档中对LRU-K的解释是:LRU-K算法根据所…

LABVIEW--正弦+高斯噪声信号及滤波

前面板信号 后面板 LABVIEW源程序链接:https://pan.baidu.com/s/11B-75i4fHZwWQyjxn9yCyQ?pwd7tfj 提取码:7tfj

JavaWeb--JavaScript Part 01

1. JavaScript概述 JavaScript(简称JS)是一种轻量级的、解释执行的客户端脚本语言,主要用于增强网页的交互性和动态性。它起源于Netscape的LiveScript,并在1995年发布时更名为JavaScript。尽管名称中包含"Java"&#xf…

2024.4.3-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…

时序预测 | Python实现BiGRU-RELM时间序列预测

时序预测 | Python实现BiGRU-RELM时间序列预测 目录 时序预测 | Python实现BiGRU-RELM时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BiGRU-RELM时间序列预测分析 将BiGRU和RELM两种模型进行了融合,BiGRU进行预测,RELM对BiGRU模型的预…

LED点阵屏与LCD1602

目录 LED点阵屏 点阵屏的介绍 LED点阵屏分类 点阵屏的显示原理 点阵案例 静态案例 电路图 keil文件 动态案例 电路图 keil文件 LCD1602 LCD1602概述 LCD1602内部结构 存储器结构 LCD引脚及应用电路 时序结构 LCD1602指令集 LCD1602编程 初始化 显示字符 …

使用libibverbs构建RDMA应用

本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small InfiniBand Application Using the Verbs API Gregory Kerr∗ College of Computer and Information ScienceNortheastern UniversityBoston, MAkerrgccs…

三防笔记本丨工业笔记本电脑丨助力测绘行业的数字化转型

测绘行业测绘行业一直是高度技术化的领域,其重要性在于为建设、规划和资源管理提供准确的地理数据。然而,随着技术的发展,传统的测绘方法已经难以满足对数据精度和实时性的要求。因此,测绘行业正逐渐向数字化转型,采用…

唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码

唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码,喜欢的朋友可以拿去使用 源码下载 唯美首页纯静态html5引导页源码

Rust 基础语法和数据类型

数据类型 Rust提供了一系列的基本数据类型,包括整型(如i32、u32)、浮点型(如f32、f64)、布尔类型(bool)和字符类型(char)。此外,Rust还提供了原生数组、元组…

记忆的方法 简单易行的记忆技巧:归纳整理,联想,重点标注压缩,改错,留痕记念(去个地方买个特别能长久保留的纪念品),差异

记忆的方法有很多,以下是一些简单易行的记忆技巧: 分类整理:将需要记忆的信息进行分类,这样可以帮助你更好地组织和记忆信息。例如,尝试记住一组词语时,可以将它们按照类别或相关性分组。归纳整理。间隔重…

mysql的安装和部署

##官网下载mysql 我下载的是一个mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 可以通过xshell 或者xftp传送 xshell则是先下载一个lrzsz 执行以下的命令 yum install lrzsz -y #安装好我下面有个一键安装的脚本 #!/bin/bash#解决软件的依赖关系 yum install cmake ncurses…

LangChain学习笔记—RAG(检索增强生成)

LangChain LangChain是一个软件开发框架,可以更轻松地使用大型语言模型(LLM)创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合,为聊天机器人、代码理…

代理IP在爬虫中的连接复用与开销减少

目录 一、引言 二、代理IP的基本概念 三、代理IP在爬虫中的使用 四、代理IP的连接复用 五、减少开销的策略 六、代码示例与注释 七、总结 一、引言 在爬虫开发中,代理IP的使用是常见的做法,尤其在目标网站设置了反爬虫机制时。代理IP能够帮助爬虫…

【鸿蒙 HarmonyOS】获取设备的地理位置

一、背景 获取移动设备的地理位置,包含:经度、维度、具体地理位置等,地理位置信息能在许多业务场景中被应用,如导航、地图服务、位置服务、社交媒体等。 下面以一个Demo例子,来实现获取设备地理位置的功能 官方文档…

27.WEB渗透测试-数据传输与加解密(上)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:26.WEB渗透测试-BurpSuite(五) BP抓包网站网址:http:…

经济学 赋税

赋税: 1.为政府服务提供金钱来源 2. 用于保护环境 3.帮助国家使用财政和货币政策,推动经济增长 4.再分配社会财富的一种方式,平衡富人和穷人的贫富差距 5.帮助我们支付市场自身可能无法实现的服务,比如公共安全,国…

Day105:代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

目录 代码审计-学前须知 Bluecms-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-2次注入审计分析 知识点: 1、PHP审计-原生态开发-SQL注入&语句监控 2、PHP审计-原生态开发-SQL注入&正则搜索 3、PHP审计-原生态开发-SQ…

全力推进Copilot,微软抽调Teams团队精英

据 Business Insider 网站报道,他们获得的一份俺们微软内部备忘录显示,说俺们微软正在建立一个专门团队,负责俺们家的 Copilot 及其相关产品的后续开发工作。 该备忘录由俺们微软人工智能业务副总裁贾里德・斯帕塔罗(Jared Spata…

【201】Java8读取JSON树形结构并插入到MySQL数据库表中

我写了一个 maven 项目的 Demo,用来演示 JAVA8 如何读取 JSON 文件树形结构,并将这种树形结构保存到 MySQL 中。 json文件 city.json {"name": "山东省","sub": [{"name": "青岛市","sub"…