linux进阶-ipc信号(软中断信号)

news2024/11/24 17:54:53

信号

信号(软中断信号),用于通知进程发生了异步事件(它是Linux系统响应某些条件而产生的一个事件,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的)。

信号是进程间通信机制的唯一异步通信机制一个进程不必通过任何操作来等待信号的到达。当进程接收到一个信号时,也会相应地采取一些行动

生成:一个信号的产生。

捕获:进程接收到一个信号。

在linux系统中,信号可能是由于系统中某些错误而产生如内存段冲突、浮点处理器错误或非法指令等,由shell和终端处理器生成并且引起中断),也可以是某个进程主动生成的一个信号可以作为在进程间传递通知或修改行为的一种方式,它可以明确地由一个进程发送给另一个进程,当进程捕获到这个信号就会按照程序进行相应操作并且去处理它)。

无论何种情况,他们的编程接口都是相同的,信号可以被生成、捕获、响应或忽略。

进程间可以互相发送信号,内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。

系统支持的信号

kill -l可查看系统支持的信号类型。

1~31信号值的信号属性为非实时信号(不可靠信号),34~64信号值的信号属性为实时信号(可靠信号),总共62个信号类型。具体信号类型意思可自行百度。

一般而言,信号的响应处理过程为:

如果该信号被阻塞,那么将该信号挂起,不对其做任何处理,等到解除对其阻塞为止。

如果该信号被捕获,那么将进一步判断捕获的类型(如果设置为响应函数,那么执行该响应函数;如果设置为忽略,那么直接丢弃该信号。)最后才执行信号的默认处理。

非实时信号和实时信号

非实时信号,主要是因为这类信号不支持排队,因此信号可能会丢失。比如发送多次相同的信号,进程只能收到一次,也只会处理一次,因此剩下的信号将被丢弃。

实时信号,主要是因为这类信号支持排队,发送了多少个信号给进程,进程就会处理多少次。

一般来说,一个进程收到一个信号后不会被立即处理,而是在恰当时机进行处理(一般是在中断返回时,或常见是内核态返回用户态时)。

即使收到信号,进程也不一定会立即去处理它,因为系统不会为了处理一个信号而把当前正在运行的进程挂起,因为这样子系统的资源消耗过大。如果不是紧急信号,是不会立即处理的,所以系统一般都会选择在内核态切换回用户态时处理信号,比如有时候进程处于休眠状态,但是又收到一个信号,于是系统就得把信号存储在进程唯一的进程PCB中。

信号的处理

生成信号的事件:程序错误、外部事件、显示请求

        程序错误:零作除数、非法存储访问等,这种情况通常是由硬件而不是由Linux内核检测到的,但由内核向发生此错误的那个进程发送相应的信号。

        外部事件:当用户在终端按下某些键时产生终端生成的信号,当进程超越了CPU或文件大小的限制时,内核会生成一个信号通知进程。

        显式请求:使用kill()函数允许进程发送任何信号给其他进程或进程组。

信号的生成既可以是同步的,也可以是异步的。

        同步信号大多数是程序执行过程中出现了某个错误而产生的,由进程显式请求生成的给自己的信号也是同步的。

        异步信号是接收过程可控制之外的事件所生成的信号,这类信号一般是进程无法控制的,只能被动接收,因为进程也不知道这个信号会何时发生,只能在发生时去处理它。一般外部事件总是异步地生成信号,异步信号可在进程运行中的任意时刻产生,进程无法预期信号到达的时刻,它所能做的只是告诉Linux内核假如有信号生成时应当采取什么行动(这相当于注册信号对应的处理)

无论是同步还是异步信号,当信号发生时,我们可以告诉linux内核采取以下3钟动作中的任意一种:

        忽略信号。大部分信号都可以被忽略,但有两个除外:SIGSTOP和SIGKILL,因为是为了给超级用户提供杀掉或停止任何进程的一种手段。此外,尽管其他信号都可以被忽略,但其中有一些却不宜忽略。例如,若忽略硬件例外(非法指令)信号,则会导致进程的行为不确定。

        捕获信号。这种处理是想要告诉Linux内核,当信号出现时调用专门提供的一个函数(信号处理函数,专门对产生信号的事件作出处理)。

        让信号默认动作起作用。

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

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

相关文章

基于springboot实现外卖点餐平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现外卖点餐平台系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜…

(Vue3)大事记管理系统 首页 文章分类页

首页 先搭架子-用element-ui中的组件:container组件、layout组件 不知道的属性学会看文档! :default-active"$route.path" 配默认高亮菜单项 $route.path 字符串,等于当前路由对象的路径,如“/home/news $route…

互联网Java工程师面试题·Java 并发编程篇·第四弹

目录 39、volatile 有什么用?能否用一句话说明下 volatile 的应用场景? 40、为什么代码会重排序? 41、在 java 中 wait 和 sleep 方法的不同? 42、用 Java 实现阻塞队列 43、一个线程运行时发生异常会怎样? 44、…

网站如何应对网络流量攻击

网络安全问题中,受到流量攻击是一种常见挑战。以下是一系列的专业建议,帮助您预防和减轻这类攻击,从而确保您的网站和数据的安全。 使用 Web 应用程序防火墙 (WAF) Web 应用程序防火墙是一项专门的安全工具,能够检测和拦截恶意流…

深入篇【C++】总结智能指针的使用与应用意义(auto_ptr/unique_ptr/shared_ptr/weak_ptr)底层原理剖析+模拟实现

深入篇【C】总结智能指针的使用与应用意义&&(auto_ptr/unique_ptr/shared_ptr/weak_ptr)底层原理剖析模拟实现 智能指针的出现智能指针的使用应用意义/存在问题智能指针原理剖析模拟实现auto_ptrunique_ptrshared_ptrweak_ptr 智能指针的出现 首先我们要理…

【PCIE733】基于PCI Express总线架构的2路160MSPS AD采集、12路LVDS图像数据采集卡

PCIE733是一款基于PCI Express总线架构的,实现2路16-bit、160MSPS ADC采集功能、12路LVDS数据采集板卡。该板卡遵循PCI Express 2.0规范,全高半长尺寸,板卡采用Xilinx的28nm高性能FPGA处理器XC7K325T作为主控制器,板卡ADC器件采用…

【Jenkins】调用API构建并钉钉通知

文章目录 Jenkins API介绍提交作业带参数的作业API 令牌 Shell调用代码 Jenkins API介绍 Jenkins 提供了远程访问 API。目前它有三种格式: XML JSON Python 远程访问 API 形式为"…/api/" 例如, Jenkins 安装位于https://ci.jenkins.io&a…

day05-前后端项目上传到gitee、后端多方式登录接口、发送短信功能、发送短信封装、短信验证码接口、短信登录接口

1 前后端项目上传到gitee 2 后端多方式登录接口 2.1 序列化类 2.2 视图类 2.3 路由 3 发送短信功能 4 发送短信封装 4.0 目录结构 4.1 settings.py 4.2 sms.py 5 短信验证码接口 6 短信登录接口 6.1 视图类 6.2 序列化类 1 前后端项目上传到gitee # 我们看到好多开源项目…

协同育人|电巢携手武汉软件工程职业学院项目实训顺利开班!

为深化校企合作,产教融合助力新工科建设,提升学生工程实践能力,电巢工程能力实训班按照不同岗位类别,匹配对应的企业岗位任职能力要求对学生开展分级培养,以产业需求为导向,培养创新型、应用型人才。 10月…

新手小白学自动化测试必须要知道的知识!

1、为什么要进行自动化测试? ①黑盒测试回归效率低; ②手动测试的偶然性和不确定性; ③回归的覆盖率不足; ④交付的产品质量无法保证,全靠评估; ⑤系统越复杂,问题越多; ⑥上线…

14私有化属性的意义

目录 私有化属性有两个意义,一个是数据保护,一个是数据过滤 一、数据保护 二、数据过滤 私有化属性有两个意义,一个是数据保护,一个是数据过滤 一、数据保护 class Person:def __init__(self):self.__age 10pass p1 Person(…

windows安装nvm以及解决yarn问题

源代码 下载 下一步一下步安装即可 检查是否安装成功 nvm出现上面的代码即可安装成功 常用命令 查看目前安装的node版本 nvm list [available]说明没有安装任何版本,下面进行安装 nvm install 18.14使用该版本 node use 18.14.2打开一个新的cmd输入node -…

Excel 从网站获取表格

文章目录 导入网站数据导入股票实时行情 用 Excel 获取网站数据的缺点:只能获取表格类的数据,不能获取非结构化的数据。 导入网站数据 转到地址之后: 实测该功能经常导致 Excel 卡死。 导入股票实时行情

Observability:使用 Elastic Observability 摄取和分析 Prometheus 指标

作者:Jenny Morris 在监控和可观察性领域,Prometheus 凭借其强大的数据收集机制、灵活的查询功能以及与其他工具的集成以实现丰富的仪表板和可视化,已成长为云原生环境中监控的事实上的标准。 Prometheus 主要是为短期指标存储而构建的&…

软件工程与计算总结(十)软件体系结构设计与构建

目录 ​编辑 一.体系结构设计过程 1.分析关键需求和项目约束 2.选择体系结构风格 3.体系结构逻辑设计 4.体系结构实现 5.完善体系结构设计 6.定义构件接口 二.体系结构原型构建 1.包的创建 2.重要文件的创建 3.定义构件之间的接口 4.关键需求的实现 三.体系结构的…

算法通过村第十四关-堆|青铜笔记|堆结构

文章目录 前言堆的概念和特征堆的构成过程插入操作删除操作总结 前言 若执于空,空亦为障。 --彼得马西森《雪豹》 堆结构是一种非常重要的基础数据结构,也是算法的重要内容,很多题目甚至只能通过用堆来进行,所以我们必须明确什么类…

AnyLogic Pro 8.8.4 Crack

为什么选择 AnyLogic 仿真软件? 行业特定库 用于通用业务流程或工作流程的流程建模库。 流体库可模拟采矿或石油天然气等行业的散装货物和液体输送。 用于铁路运输、码头和堆场的铁路图书馆。 行人图书馆,用于记录机场、体育场馆、车站或购物中心的行人…

深度学习环境 | Linux下安装,卸载,查看pytorch版本

一 在Linux下安装pytorch 1 进入Linux环境以后 新建一个名为pytorch的虚拟环境,执行以下代码: conda create -n pytorch python3.82 激活新建的pytorch虚拟环境,执行以下代码: conda activate pytorch # conda版本较新使用这条…

目录启示:PHP 与命名空间的声明

文章目录 参考环境命名空间概念版本支持影响范围 全局命名空间概念魔术常量 \_\_NAMESPACE\_\_声明全局命名空间 声明命名空间为空间命名命名规则核心命名空间 子命名空间的声明在同一文件中定义多个命名空间无括号命名空间声明有括号命名空间声明禁止混合使用推荐使用有括号命…

【Python学习笔记】类型/运算/变量/注释

前言 人生苦短,追求生产力,做一只时代风口的猪,应该学python Python语言中,所有的数据都被称之为对象。 1. 对象类型 Python语言中,常用的数据类型有: 整数, 比如 3 小数(也叫浮…