信号的产生,保存与处理

1.信号的概念:

在生活中的信号:红绿灯,下课铃声,闹钟

红绿灯,你为什么认识红绿灯?

1.能识别红绿灯

2.能理解红灯绿灯黄灯

也就是说信号在还没产生的时候,我们已经认识信号并知道如何去处理

信号产生了,我们并不一定要立即处理,而是选择合适的时间去处理这也就意味着我们有暂时保存信号的能力

信号的到来的时候我们并不清楚,信号的到来相对于我们正在做的工作,是异步产生的

同步与异步:老师在教室上课,结果忘记带鼠标,于是叫小王去办公室拿鼠标,老师一直等待小王拿回鼠标才开始上课,这叫同步,而老师并没有等小王,而是直接上课,这叫异步

什么叫信号?

信号是一种向目标进程发送通知消息的机制

0号信号?

代表没有收到信号

2.信号的产生:

进程的两种运行模式,1.前台 2.后台(./xxx &)  jobs:查看后台任务

前台只能有一个进程,后台可以有多个(fg将后台转到前台) ctrl+c 终止前台进程  ctrl+z:将前台运行不能被暂停,该前台立即被放到后台(前台变后台) bg:前台到后台

操作系统怎么知道有数据从键盘上输入了?中断;存在函数指针数组叫做中断向量表

信号本质是用软件来模拟上述中断的行为

产生的几种方式

.键盘

ctrl +c=signal 2 向前台发送2号信号

ctrl z (暂停) , ctrl  \(终止进程)

.系统调用kill

 

给自己发送信号

 

给自己发送SIGABRT信号,进程直接终止

 

自定义了SIGABRT信号,为什么进程没有退出?

abort()函数不会被更改

.异常(CPU->OS->进程)

int a=1;a/=0; 发生SIGFPE-8信号

 

 

为什么一直在处理8号信号?

进程并没有退出,异常一直存在,但是进程没有退出,依旧要去处理异常

那么后续代码还会执行吗?

不会

硬件报错

在硬件上出错的,CPU上的报错会传递给OS,OS解释为kill命令,给目标进程发送信号

无论有多少中产生方式,最终都是OS向进程发信号

OS如何发送信号给进程,进程又是如何表示自己收到了信号?

OS发信号本质是朝进程位图中去写信号,进程中维护了位图,表示自己收到的信号。每个进程都有一张自己的函数指针数组,数组下标对应了信号编号,再根据位图的内容去处理信号。

.软件条件

管道为软件资源,管道的读端关闭,写段未关闭,OS会检查管道的一些字段去给管道发送SIGPIPE,关闭管道

闹钟 alarm   SIGALRM

return value:返回剩余时间

操作系统中的时间

1.操作系统只要将进程调度号就能完成用户的操作

2.操作系统本质上时死循环

3.信号的保存      

a.实际执行信号的处理动作称为信号递达(Delivery)

b.信号从产生到递达之间的状态,称为信号未决(Pending)。此时信号存储在未决表中

c.进程可以选择阻塞 (Block )某个信号。未决之后,暂时不递达(处理),会一直储存在未决表里

d.被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作.我们可以提前阻塞信号或解除阻塞信号

e.注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。

 

信号集操作函数:

 int sigemptyset(sigset_t *set);  全部清空

int sigfillset(sigset_t *set); 全部填充

int sigaddset (sigset_t *set, int signo);  添加某个信号

int sigdelset(sigset_t *set, int signo); 删除某个信号

int sigismember(const sigset_t *set, int signo); 判定信号是否在集合里

修改block表

sigprocmask

int sigprocmask(int how, const sigset_t *set, sigset_t *oset);

how:SIG_BLCOK;SIG_UNBLOCK;SIG_SETMASK

SIG_BLOCK:新增一些屏蔽 mask=mask|set

SIG_UNBLCOK:解除一些屏蔽 mask&=~mask

SIG_SETMASK:重新设计屏蔽  mask=set

oset:输出型参数,返回老的BLOCK位图   

是否屏蔽了所有信号,进程就杀不死? 9号信号无法被屏蔽

修改pending表

sigpending

  set:输出型参数

 

 

一开始先屏蔽二号信号,但此时未接收到2号信号,所以全为0

发送二号信号此时出现1;

清除Block表后,未决表中的信号递达,处理信号

4.信号的处理

在合适的时候处理,是什么时候处理?

在执行默认方法从用户态转换成内核态,执行信号检测和信号处理

在执行自定义方法时,进程在在内核态中保存上下文,然后返回到用户态,执行用户的自定义方法,在通过sigreturn接口返回到内核态,再次返回到用户态上次未执行的代码继续执行,这个过程也叫做信号的捕捉

用户态是一种受控的状态,他访问的资源是有限的

内核态是一种操作系统工作的状态,能够访问大部分资源

用户态只能访问自己进程地址空间内的0-3GB空间,而内核态可以让用户以OS的身份访问3-4GB,此时跳转到内核地址空间,通过内核级页表访问物理内存中的OS代码

所以无论如何调度,CPU都能直接找到OS,我们所有的代码执行都能在自己的进程地址空间内通过跳转的方式进行调用和返回

CPU是如何表示这两种状态的?

CPU内会有CS寄存器,其中有2个比特位,1表示内核,3表示内核

 

1.默认行为 man 7 signal  SIG_DFL  signal(2,SIG_DFL)

2.忽略  SIG_IGN signal(2,SIG_IGN)

 

3.自定义 signal

 

  -

特例:9号信号不能被自定义

5.信号的其他补充问题      

Core Down  

 

当进程崩溃时,将所有的核心信息转储到磁盘中,由pid+core命名

 

如何进行自定义信号的捕捉

sigaction

int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);

Linux不允许正在处理一个信号时,又收到另一个同种信号,此时,OS在处理这个信号的同时将2号信号阻塞住,直到处理完成后恢复Block表,如果除了当前信号被自动屏蔽之外,还希望自动屏蔽另外一些信号,则用mask字段说明这些需要额外屏蔽的信号,当信号处理函数返回时自动恢复原来的信号屏蔽字

sigemptyset(act.mask)

sigaddset(act.mask,3)

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

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

相关文章

数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例

时间序列概况在日常生活和专业研究中都很常见。简而言之,时间序列概况是一系列连续的数据点 y(0), y(1), …, y(t) ,其中时间 t 的点依赖于时间 t-1 的前一个点(或更早的时间点)。 在许多应用中,研究者致力于预测时间序列概况的未来行为。存在各种建模方法。这些模型通常基于过…

算法:76.最小覆盖子串

题目 链接:leetcode链接 思路分析(滑动窗口) 还是老样子,连续问题,滑动窗口哈希表 令t用的hash表为hash1,s用的hash表为hash2 利用hash表统计窗口内的个字符出现的个数,与hash1进行比较 选…

Java数据存储结构——平衡二叉树

文章目录 22.1.3 平衡二叉树22.1.3.1 LL22.1.3.2 LR22.1.3.3 RR22.1.3.4 RL 22.1.3 平衡二叉树 平衡二叉树的特点: 二叉树左右两个子树的高度差不超过1任意节点的左右两个子树都是一颗平衡二叉树 在原来的平衡二叉树中,新增数据会破坏平衡性&#xff…

【CMake】使用CMake在Visual Studio 构建多cpp文件项目

首先,我们在 C m a k e Cmake Cmake文件下写入以下代码: #需求的最低cmake程序版本 cmake_minimum_required(VERSION 3.12)#本工程的名字 project(OpenGL)#支持的C版本 set(CMAKE_CXX_STANDARD 20)#本工程主程序文件及输出程序名称,生成exe …

信奥初赛解析:1.1-计算机概述

目录 前言 知识要点 一、发展史 二、计算机的分类 三、计算机的基本特征 四、计算机的应用 课堂练习 题目列表 定项选择题 不定项选择题 参考答案 定项选择题 不定项选择题 前言 从今天开始,我们要重点讲初赛内容, 预计讲半年,信…

【漏洞复现】金某云星空ERP GetImportOutData .net反序列化漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

★ C++进阶篇 ★ 多态

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第一章----多态 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 …

make 和 Makefile/makefile

1.概念 make 是一条命令 &#xff0c; Makefile/makefile是一个文件。 【 makefile 是一个 写了如何编译文件&#xff0c;形成可执行程序的文件】 2. 语法 1. 基本语法 依赖关系 // 依赖关系 由 目标名和依赖文件列表组成&#xff0c;语法为 目标名 : 依赖文件列表 【Ta…

Playwright快速入门(TypeScript版)

文章目录 1. 前言1. 系统环境要求2. Playwright介绍3. 安装Playwright4. 运行示例测试5. HTML 测试报告6. 在UI模式下运行测试示例7. 更新Playwright版本 1. 前言 Playwright 相比 Selenium&#xff0c;具有多浏览器支持、现代化 API、更快性能、精细页面控制、自动等待元素、…

医学数据分析实训 项目三 关联规则分析作业--在线购物车分析--痹症方剂用药规律分析

文章目录 项目三 关联规则分析一、实践目的二、实践平台三、实践内容任务一&#xff1a;在线购物车分析&#xff08;一&#xff09;数据读入&#xff08;二&#xff09;数据理解&#xff08;三&#xff09;数据预处理&#xff08;四&#xff09;生成频繁项集&#xff08;五&…

什么是 HTTP/3?下一代 Web 协议

毫无疑问&#xff0c;发展互联网底层的庞大协议基础设施是一项艰巨的任务。 HTTP 的下一个主要版本基于 QUIC 协议构建&#xff0c;并有望提供更好的性能和更高的安全性。 以下是 Web 应用程序开发人员需要了解的内容。 HTTP/3 的前景与风险 HTTP/3 致力于让互联网对每个人…

[数据集][图像分类]茶叶病害分类数据集6749张7类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;6749 分类类别数&#xff1a;7 类别名称:["Unlabeled","alg…

项目实现:云备份②(文件操作、Json等工具类的实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话&#xff0c;可以先移步这篇文章内容&#xff1a; 云备份项目的介绍 其中介绍了云备份项…

在 Dify 中高效利用 SiliconCloud API

引言 SiliconCloud 以其丰富的模型库和卓越的处理速度&#xff0c;在 Dify 平台上实现高效工作流和智能代理变得轻而易举。本文将指导您如何在 Dify 中集成 SiliconCloud 的强大功能。 集成 SiliconCloud 模型 步骤一&#xff1a;设置 SiliconCloud 账户 首先&#xff0c;您…

5. Python之数据类型

Python数据类型有数值型&#xff0c;字符串型&#xff0c;布尔型等等 内置函数type()&#xff0c;可以查看变量的数据类型 。 一、数值类型 整数&#xff08;没有小数部分&#xff0c;包含正整数&#xff0c;负整数&#xff0c;0&#xff0c;默认为十进制数&#xff09;&…

PHP:强大的Web开发语言

PHP&#xff1a;强大的Web开发语言 一、PHP 简介及优势 PHP 的基本概念 PHP&#xff08;PHP: Hypertext Preprocessor&#xff09;即 “超文本预处理器”&#xff0c;是一种通用开源脚本语言&#xff0c;最初由 Rasmus Lerdorf 于 1994 年创建。它可以在服务器上执行&#xf…

正则表达式匹配整数与浮点数失败与解决方案

正则表达式匹配整数与浮点数失败与解决方案 问题描述问题分析解决方案总结 问题描述 在处理数据的时候需要提取文本内整数与浮点数&#xff0c;这个时候想到使用正则表达式&#xff0c;咨询百度文心一言给出以下方案及参考代码 import re text "我有100元&#xff0c;…

华为地图服务功能概览 -- HarmonyOS自学7

华为地图服务式Harmony OS生态下的一个地图服务&#xff0c;为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化地图呈现&#xff0c;地图搜索和路线规划功能。 主要包括七大功能&#xff1a;静态图&#xff0c;场景化控件&#xff0c;地点搜索&#xff0c…

函数的认识(二)

函数的基础知识可查看&#xff1a;函数的认识&#xff08;一&#xff09; &#xff08;1&#xff09;函数说明文档 函数是纯代码语言&#xff0c;想要理解其含义&#xff0c;就需要一行行的去阅读理解代码&#xff0c;效率比较低。 我们可以给函数添加说明文档&#xff0c;辅…

Python 解析 Charles JSON Session File (.chlsj)

Charles 代理&#xff0c;是一款抓包软件&#xff0c;可以帮助我们抓取浏览器请求跟响应。 1、在 Filter 里面输入需要抓包的网址 2、右键 Export Session 3、文件类型选择 JSON Session File (.chlsj) 保存 4、解析响应的数据结构 response.body.text 是文本字符串。 # 导入…