进程间通信-信号概述

一、信号的概念

        信号是一种进程间通信的机制,用于在软件层面上对异步事件进行通知。信号通常是由操作系统或其他进程发送给目标进程的一种通知,以指示发生了某种事件或条件。这样的事件可能包括硬件异常、用户输入、定时器到期、子进程状态变化等。

引发内核为进程产生信号的各类事件如下:
对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号。比如输入 Ctrl+C
通常会给进程发送一个中断信号。
硬件发生异常,即硬件检测到一个错误条件并通知内核,随即再由内核发送相应信号给
相关进程。比如执行一条异常的机器语言指令,诸如被 0 除,或者引用了无法访问的
内存区域。
系统状态变化,比如 alarm 定时器到期将引起 SIGALRM 信号,进程执行的 CPU
时间超限,或者该进程的某个子进程退出。
运行 kill 命令或调用 kill 函数。

二、使用信号目的

  1. 让进程知道已经发生了一个特定的事情: 信号是一种通知机制,用于通知进程发生了特定的事件或条件。这可以是用户输入、硬件异常、定时器到期等。进程在收到信号后可以采取相应的行动。

  2. 强迫进程执行它自己代码中的信号处理程序: 进程可以为特定信号注册信号处理函数。当进程接收到相应信号时,会执行与该信号关联的处理函数,从而允许进程采取定制的行动来应对信号

三、 信号特点

  • 简单: 信号是一种轻量级的通信机制,它们提供了一种快速的方式来通知进程发生了某个事件,而不需要复杂的通信协议。

  • 不能携带大量信息: 信号通常只能携带有关事件的少量信息。它们不适用于传递大块的数据。

  • 满足某个特定条件才发送: 信号通常在某个条件满足时才会被发送,例如按下特定的键盘组合、硬件异常等。

  • 优先级比较高: 信号通常有不同的优先级,某些信号可能具有比其他信号更高的紧急性,例如强制终止信号(SIGKILL)。

  • 在Unix中,可以使用命令kill -l来列出系统定义的信号,以及它们的编号。前31个信号是常规信号,而其余的是实时信号。

 四、信号

 五、信号五种默认动作以及三种状态

默认处理动作:

  1. Term(终止进程): 进程会被正常终止。
  2. Ign(忽略信号): 进程会忽略掉这个信号,不做任何响应。
  3. Core(终止进程,并生成一个core文件): 进程会被终止,并在当前工作目录生成一个核心转储文件(core dump)。
  4. Stop(暂停当前进程): 进程会被暂停,等待被其他信号唤醒。
  5. Cont(继续执行当前被暂停的进程): 如果进程之前被暂停,使用该信号可以继续执行。

信号的几种状态:

  1. 产生: 信号从发出源处产生,但尚未传递给接收者。
  2. 未决: 信号已经发出并且到达了接收者,但接收者尚未处理它。
  3. 递达: 信号已被接收者处理。

关于SIGKILL和SIGSTOP的特殊性:

  • SIGKILL(终止信号)SIGSTOP(暂停信号) 是两个特殊的信号,它们不能被捕捉(handled)、阻塞(blocked)或者忽略(ignored),只能执行默认动作。这是为了确保系统管理员能够终止或暂停进程,而进程无法阻止或忽略这些操作。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++笔记之信号量、互斥量与PV操作

C笔记之信号量、互斥量与PV操作 文章目录 C笔记之信号量、互斥量与PV操作1.信号量概念2.信号量例程一3.信号量例程二4.信号量例程三5.互斥量6.PV操作概念7.PV操作详解——抄自:https://mp.weixin.qq.com/s/vvjhbzsWQNRkU7-b_dURlQ8.PV操作的英文全称 1.信号量概念 …

【一、灵犀考试系统项目设计、框架搭建】

一、创建数据库 1、打开power designer,新建数据库模型 2、新建数据表,以及关系 【注意】 图片的类型有两种:varbinary 和 image varbinary : 二进制字节流,可以自动控制长度 image : 最大可放2G图片 3、创建数据库&#…

FastThreadLocal 快在哪里 ?

FastThreadLocal 快在哪里 ? 引言FastThreadLocalset如何获取当前线程私有的InternalThreadLocalMap ?如何知道当前线程使用到了哪些FastThreadLocal实例 ? get垃圾回收 小结 引言 FastThreadLocal 是 Netty 中造的一个轮子,那么为什么放着…

Doris 2.0.1 DockerFile版 升级实战

1、Doris 2.0.1 DockerFile 的制作 参考 Doris 2.0.1 Dockerfile制作-CSDN博客 2、之前的Doris 集群通过 Docker容器进行的部署,需提前准备好Doris2.0.1的镜像包 参考: 集群升级 - Apache Doris Doris 升级请遵守不要跨两个及以上关键节点版本升级的…

RabbitMQ之Fanout(扇形) Exchange解读

目录 基本介绍 适用场景 springboot代码演示 演示架构 工程概述 RabbitConfig配置类:创建队列及交换机并进行绑定 MessageService业务类:发送消息及接收消息 主启动类RabbitMq01Application:实现ApplicationRunner接口 基本介绍 Fa…

JDBC-day02(使用PreparedStatement实现CRUD操作)

所需的数据库数据要导入到自己的数据库库中 三:使用PreparedStatement实现CRUD操作 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果。其实一个数据库连接就是一个Socket连接。CRUD操作:根据返回值的有无…

李宏毅 2022机器学习 HW3 boss baseline 上分记录

作业数据是所有数据都有标签的版本。 李宏毅 2022机器学习 HW3 boss baseline 上分记录 1. 训练数据增强2. cross validation&ensemble3. test dataset augmentation4. resnet 1. 训练数据增强 结论:训练数据增强、更长时间的训练、dropout都证明很有效果&…

QT内存管理

Qt的半自动化的内存管理 (1)QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象。 (2)QWidget及其派生类的对象,可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构…

小谈设计模式(16)—抽象工厂模式

小谈设计模式(16)—抽象工厂模式 专栏介绍专栏地址专栏介绍 抽象工厂模式结构抽象工厂(AbstractFactory)具体工厂(ConcreteFactory)抽象产品(AbstractProduct)具体产品(C…

Postgresql中的C/C++混编(JIT)

1 Postgresql编译JIT 整体上看使用了GCC、G编译文件,最后用G汇总: GCC编译的三个.o文件llvmjit、llvmjit_deform、llvmjit_expr llvmjit.c -> llvmjit.o gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -…

Java中栈实现怎么选?Stack、Deque、ArrayDeque、LinkedList(含常用Api积累)

目录 Java中的Stack类 不用Stack有以下两点原因 1、从性能上来说应该使用Deque代替Stack。 2、Stack从Vector继承是个历史遗留问题,JDK官方已建议优先使用Deque的实现类来代替Stack。 该用ArrayDeque还是LinkedList? ArrayDeque与LinkList区别&#xff1…

强化学习------Sarsa算法

简介 SARSA(State-Action-Reward-State-Action)是一个学习马尔可夫决策过程策略的算法,通常应用于机器学习和强化学习学习领域中。它由Rummery 和 Niranjan在技术论文“Modified Connectionist Q-Learning(MCQL)” 中…