Linux进程信号——信号的概念与产生

news2024/11/9 2:02:07

文章目录

    • 信号及其产生与发送
      • 什么是Linux信号
      • 信号的产生
        • 终端按键
        • 系统调用
        • 软件条件
        • 硬件条件
      • 核心转储
      • 存储临时信号

信号及其产生与发送

我们从生活中理解信号,例如各种指示灯,红绿灯之类的,我们能认识红绿灯是因为每一种不同的情况在我们大脑中已经存下了,并且根据每一种不同的情况我们也可以作出不同的反应

在操作系统中的信号也是如此,系统需要做的两个动作就是识别、处理

什么是Linux信号

信号本身其实就是一种通知的形式,用户或者操作系统可以通过信号给进程发送信息,让进程来进行处理

例如前台进程可以发送一个ctrl + c指令来中断进程

我们可以使用kill -l查看进程信号表

请添加图片描述

这些个信号存在bits/signum.h文件中,大致可以分为两类,从1到31是标准信号,其余的都是POSIX实时信号,都有不同的含义

ctrl + c其实就对应着2号信号
请添加图片描述
Value表示信号编号、Action表示默认行为

Term表示终止、Core稍后会讲解

回到上面的问题,进程想要处理信号就需要识别信号,那么进程如何识别信号,其实就是程序内置的代码可以识别+处理

信号的产生是随机的,这种随机性是在时间上随机,产生的信号随机

因此进程收到信号时可能正在处理其他事情,当收到信号也无法立即响应

那么就一定存在某种数据结构来保存收到的信号

因此信号的一生就只有三个过程,产生、保存、处理

信号的产生

信号的产生有四种方式,分别是终端按键、系统调用、软件条件、硬件条件

终端按键

也就是常见的组合键,例如ctrl+c ctrl+z

分别对应不同的信号,就是2号信号和3号信号

这里需要了解到,使用终端按键这个方法产生的信号一定是发送给前台进程的

在Windows系统下的前台进程很好理解就是你能看到的进程都是

在Linux的前台进程其实就是你能够输入信息的进程,例如bash,或者写出来运行的进程

而后台进程是无法获取你在终端里输入的信息的

除此之外还有一个特性就是bash是默认前台进程

系统调用

系统调用简单理解就是操作系统提供给用户的函数

kill、raise、abort都能产生信号
请添加图片描述

请添加图片描述

请添加图片描述

kill是向指定进程发送指定的信号,raise是给自己进程发送指定的信号,abort就是字面意思终止当前进程6号信号

软件条件

13号信号是SIGPIPE,我们之前学管道的时候,说写端关闭,管道就会自动关闭,读端关闭就会终止进程

其实就是当操作系统发现之后,会给这个进程发送SIGPIPE,从而终止进程

硬件条件

也称之为硬件异常,典型的硬件错误就是除0错误、野指针、内存泄漏等

CPU运算单元产生异常,内核将这个异常解释为SIGFPE信号发送给进程

然后进程就会终止

所有的信号可能有不同的来源,单一定会被操作系统识别,发送给进程处理

核心转储

信号的默认行为中有一个是core,我们称之为核心转储

简单说就是当操作系统检测到这个信号时,进程在内存中的核心数据需要被保存下来,也就是保护现场,将数据转移到磁盘中

存储临时信号

当进程收到信号的时候,不一定会立即处理,先存储下来

用的数据结构其实就是位图,从1到31个信号,使用31个bit位

每一位的0或1表示是否收到信号,不同位表示不同信号

这个位图在每个PCB中都独立保存

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

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

相关文章

Apache Doris 跨集群数据同步 CCR 全面介绍

CCR 概述 CCR(Cross Cluster Replication)也就是跨集群数据复制,能够在库/表级别将源集群的数据变更同步到目标集群,可用于提升在线服务的数据可用性、隔离在离线负载、建设两地三中心等。 CCR 通常被用于容灾备份、读写分离、集…

末代皇帝Intel核显黑苹果,NUC10的性能到底有多强

末代皇帝Intel核显黑苹果,NUC10的性能到底有多强 一、可以核显的Intel iGPU有哪些 核显是一个伟大的产物,它可以在我们没有多余的钱去买多余的显卡的时候排上用场,特别是在mini小主机的市场上,核显就显得尤为重要的,…

图形化的Agent工具

1 图形化 Agent 工具 1.1 核心组件 机器人 Bot:一个 AI 应用,或称为 Agent知识库:上传个人数据,机器人可根据其内容进行回复工作流:将大问题拆解成多个小问题,通过路径实现,路径上的每个节点完…

tomcat实战演练

一.tomcat介绍 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用, Tomcat 具有处理 HTML 页面的功能,它还是一个 Servlet 和 JSP容器。Tomc…

Python优化算法13——飞蛾扑火优化算法(MFO)

科研里面优化算法都用的多,尤其是各种动物园里面的智能仿生优化算法,但是目前都是MATLAB的代码多,python几乎没有什么包,这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考:Python优化算…

三种插入排序详解和代码实现(直接插入排序、折半插入排序和希尔排序)

目录 基本思想直接插入排序排序方法代码实现复杂度分析 折半插入排序排序方法代码实现复杂度分析 希尔排序排序方法代码实现复杂度分析最佳情况平均情况最坏情况增量序列的影响 基本思想 插入排序的基本思想是:每一趟将一个待排序的元素按照其关键字的大小插入到已经…

Hadoop 分布式集群搭建

HDFS分布式集群搭建 一、部署规划1.1 进程规划1.2 软件规划1.3 用户规划1.4 目录规划 二、 搭建HDFS 分布式集群2.1 HDFS 集群配置2.1.1 下载安装 Hadoop2.1.2 修改 hadoop-env.sh 配置文件2.1.3 修改 core-site.xml 配置文件2.1.4 修改 hdfs-site.xml 配置文件2.1.5 修改 slav…

力扣刷题(1)

两数之和 两数之和-力扣 思路: 动态开辟一个数组,用来存放下标;两个for循环嵌套来判断,数组中的两个数相加是否与target相等若相等,则将 * returnSize赋值为2,表示数组中两个数,并将arr数组…

数学建模之数据分析【九】:数据清理总结

文章目录 一、什么是数据清理二、为什么数据清理很重要三、执行数据清洁的步骤四、如何执行数据清理五、数据清理的Python库实现5.1 数据检查与探索5.2 使用df.info()检查数据信息5.3 检查分类和数字列5.4 检查分类列中唯一值的总数5.5 执行数据清理的步骤5.5.1 删除所有上述不…

真的爽到了!Coze的黑神话 “循环“ 闪亮登场,啥都能循环,让你一次通关!

心心念念了很久,Coze工作流终于支持循环操作啦,泪奔~~ 看,就在工作流节点的“选择器”和“意图识别”当中偷偷摸摸地多了一个“循环” 这玩意可比批处理强太多了,批处理只能在当前节点循环,做一些简单的循环任务还不错…

【日记】狗尾巴草与暗恋(1519 字)

写在前面 消极内容注意 正文 好想吃火龙果。 下周会变得异常艰难。因为事情已经垒到天上去了,还要来检查。 上午,同事送了一点水果,我从来没见过。问了一下别人,有的说是灯笼果,有的说是菇凉果、姑娘果。搜了一下&am…

深入理解Elasticsearch:让搜索性能飞起来!

Elasticsearch 概述 Elasticsearch是一个基于lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。 ELK 技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。 而Elasticsearch 是一个开源的高扩展的分布式全文搜索引擎, 是整个 ELK技术…

polarctf靶场[WEB]Don‘t touch me、机器人、uploader、扫扫看

目录 [web]Dont touch me 考点:查看源代码、前端 [web]机器人 考点:robot协议 工具:御剑,kali dirsearch [web]覆盖 考点:parse_str覆盖 [web]扫扫看 考点:目录扫描 工具:御剑、kali d…

【冒泡排序算法】输入n个数进行排序

要求:输入n个数进行排序 实现:使用冒泡排序算法,使用C语言实现 冒泡排序的基本原理: 比较相邻元素:从数组的开始位置,比较每对相邻的元素。如果前一个元素大于后一个元素,则交换它们。重复过…

数组基本知识2

目录 前言 二维数组 使用原因 定义二维数组 访问数组元素 实例 前言 上一篇,我简单的复习了一维数组,本篇讲述二维数组的基本知识,帮助大家预习和复习。 二维数组 使用原因 本质原因:一维数组,已经无法满足解决…

OSPF路由配置--单区域

目录 因为OSPF有很多重要的特殊区域和内容,所以划分为多篇博客来配置 一. 实验拓扑图 二. 实验配置 三. 实验验证: 因为OSPF有很多重要的特殊区域和内容,所以划分为多篇博客来配置 不理解OSPF路由动态协议的可以回顾一下OSPF详解,下这一系列的实验都不再做解…

SpringBoot集成kafka-消息转发@sendTo()注解

SpringBoot集成kafka-消息转发sendTo 1、消费者2、生产者3、实体类对象4、JSON工具类5、配置文件application.yml6、测试类7、测试 1、消费者 启动消费者进行消息监听,消费者A监听到生产者发送的消息使用sendTo()注解将消息转发给消费者B package com.power.consu…

在树莓派5上使用pytroch进行模型训练—全流程笔记

在树莓派上运行pytroch模型🚀 在完成了树莓派的一系列基础配置学习之后,按照规划,下一步要做的就是在树莓派上安装一个pytorch,尝试运行一下深度学习的模型,如果可以实现且准速度有一定保证的话,就可以作为…

代码随想录算法训练营第50天|卡码网 98. 所有可达路径

1.卡码网 98. 所有可达路径 题目链接:https://kamacoder.com/problempage.php?pid1170 文章链接:https://www.programmercarl.com/kamacoder/0098.所有可达路径.html#总结 1.图的存储 本题我们使用邻接表 或者 邻接矩阵都可以,因为后台数据…

掌握路演艺术:创新大赛路演稿撰写指南

如何在创新大赛中脱颖而出?一份精心准备的路演稿是关键 前言开场白:抓住注意力的第一步项目概述:清晰传达核心价值市场分析:展示项目的市场潜力商业模式与盈利计划:务实的策略团队介绍:展现团队的实力与文化…