32 信号入门

重点

1.掌握linux信号的基本概念
2.掌握信号产生的一般方式
3.理解信号递达和阻塞的概念,原理
4.掌握信号捕捉的一般形式
5.重新了解可重入函数的概念
6.了解竞态条件的情景和处理方式
7.了解SIGCHLD信号,重新编写信号处理函数的一般处理机制

目录

1.概括
2.概念
3.信号分类
4.信号的处理方式
5.自定义行为

概括

信号部分大致分为下面四个部分
在这里插入图片描述

概念

信号的例子:信号弹,下课上课铃声,红绿灯,快递发短信,发令枪,哨子,闹钟,外卖电话,冲锋号

需要知道的内容

a.怎么认识例字里这些信号的,有人教然后记住了
认识信号,包括识别信号,知道信号的处理方法。记住了常见的信号
b.即使是没有信号产生,我们也知道信号发生后该干什么
c.信号产生了,可能不立即处理,可能正在做更重要的事情,在合适的时候再处理。所以在产生信号,时间窗口,处理信号前,在这个时间窗口内都必须记住这个信号来了

结论

1.进程必须能够识别+处理信号,信号就算没有产生,也有具备识别和处理的能力,信号的处理属于进程内置功能的一部分
2.进程即便没有收到信号,也能知道哪些信号该怎么处理
3.当进程真的收到了一个具体的信号的时候,进程可能并不会立即处理这个信号
4.一个进程必须当信号产生,到信号开始处理,就一定会有时间窗口,进程具有保存哪些信号已经发生了的能力

生活角度的信号

在网上买了很多件商品,再等待不同商品快递的到来,但即使宽邸没有来,也知道快递来临时,该怎么处理快递,也就是“识别快递”
当快递员到了楼下,也收到了快递的通知,但正在打lol团战,5min后才能取快递。那么在5min内,并没有下去取快递,但是知道有快递来了,也就是取快递的行为不一定要立即执行,可以理解为“在合适的时候去取”
在收到通知,再到你拿到快递期间,是有一个时间窗口的,在这段时间,并没有拿到快递,但是知道有一个快递来了,本质就是“记住有一个快递要取”
当时间合适,拿到快递就开始处理。一般有三种方式:1.执行默认动作,打开使用 2.执行自定义动作,如送给别人 3.忽略快递,继续下一把游戏

技术角度的信号

前台和后台

在xshell运行一个死循环程序
在这里插入图片描述

当这个程序运行的时候,输入什么命令都不管用,这就是前台进程。这个程序一运行,bash就不会接收键盘命令了。按crtl+c可以杀死这个前台进程

运行的时候加个取地址,就代表后台运行,这时候输入命令可以正常执行
在这里插入图片描述在这里插入图片描述

这时候输入crtl+c无法杀死这个后台进程
后台进程可以启动多个,不会影响bash接收命令,只不过命令回显会打印出来,是多个进程共同访问显示器这个共享资源,但没有保护,才出现这种情况

总结
一次登录中,一个终端,会配上一个bash,每一个登录,只允许一个进程是前台进程,可以允许多个进程是后台进程。前后台进程的区分是谁能获取键盘输入

crtl c

用户输入命令,在shell下启动一个前台进程
用户按下crtl+c组合键,输入产生一个硬件中断,被os获取,解释成信号,发送给目标前台进程,前台进程因为收到信号,引起进程退出

操作系统就是我们,信号就是快递的短信,收到短信取快递就是操作系统收到信号结束了进程

注意
1.crtl+c产生的信号只能发给前台进程,一个命令后面加个&可以放到后台运行,这样shell不必等待进程结束就可以接受新的命令,启动新的进程
2.shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像crtl+c这种控制键产生的信号
3.前台进程在运行过程中用户随时按下crtl+c产生一个信号,也就是说该进程的用户空间代码执行到任何地方都有可能收到SIGINT信号而终止,所以信号相对于进程的控制流程来说是异步(Asyncchronous)的

概念

信号是进程之间事件异步通知的一种方式,属于软中断

信号分类

kill -l 查看所有信号

在这里插入图片描述

每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,crtl+c就是2号信号,#define SIGINT 2

1-31是普通信号,34以上是实时信号,我们只讨论普通信号

信号的处理方式

看到红灯时,一般情况下会停下来,有的人可能会忽略红灯继续行走,也可以有其他行为,唱歌等
对于信号:
1.默认处理
2.忽略
3.自定义动作,提供一个信号处理函数,要求内核在处理该信号时切换到用户态去执行这个处理函数,这种方式也称为捕捉(Catch)一个信号

自定义行为

如何验证crtl+c是收到了2号新号,可以对2号信号进行捕捉,自定义行为,再次crtl+c看会不会执行自定义动作

signal函数
在这里插入图片描述
这个函数可以对传入的信号编号自定义处理方式,第二个参数是一个void的函数指针
用下面代码测试:

#include <stdio.h>
#include <iostream>
#include <unistd.h>
#include <signal.h>using namespace std;
void myhandler(int signal)
{cout << "get a singal" << signal << endl;
}int main()
{signal(SIGINT, myhandler);while (true){//printf("hello world\n");sleep(1);}
}

运行后输入crtl+c会变为输出函数里的内容
在这里插入图片描述

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

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

相关文章

网络研讨会 | 数据中心中的人工智能

人工智能&#xff08;AI&#xff09;是嵌入式开发人员必须解决的最复杂的技术之一。将其集成到您的系统中会带来很多问题而不是很多答案。行业媒体Embedded Computing Design特地推出“工程师的人工智能集成指南”月度网络研讨会系列&#xff0c;目的是尽可能地简化嵌入式计算设…

[SWPUCTF 2022 新生赛]ez_ez_unserialize

要绕过wakeup函数&#xff0c;只要序列化的中的成员数大于实际成员数&#xff0c;即可绕过。 <?php class X {public $x fllllllag.php; }$anew X(); echo serialize($a); O:1:“X”:1:{s:1:“x”;s:13:“fllllllag.php”;} 修改为 O:1:“X”:3:{s:1:“x”;s:13:“flllll…

自动化立体库安全使用管理制度

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 关于自动化立体库安…

如何看待AIGC技术

介绍 AIGC技术&#xff08;人工智能、互联网、物联网、大数据和云计算&#xff09;是指结合人工智能、互联网、物联网、大数据和云计算等技术&#xff0c;形成一个综合的技术体系。以下是一些观点&#xff0c;可供参考&#xff1a; • 创新和发展&#xff1a; AIGC技术…

北京筑龙当选中招协第二届招标采购数字化专业委员会执行主任单位

4月18-19日&#xff0c;中国招标投标协会&#xff08;以下简称中招协&#xff09;2024年年会在宁波召开&#xff0c;北京筑龙作为中招协理事会员单位受邀出席会议。会议期间举行了“电子招标采购专业委员会换届会议暨第二届第一次工作会议”&#xff0c;北京筑龙当选第二届招标…

MySQL--对于库的操作对于表的操作

一、库的查看创建删除 库的查看 show databases; 库的创建&#xff08;创建一个test1数据库&#xff09; create database test1; 同样&#xff0c;我们另起一个root会话&#xff0c;并执行 cd /var/lib/mysql 然后发现多了一个test1目录 删除库&#xff08;删除test1数…

消息队列 Kafka 入门篇(二) -- 安装启动与可视化工具

一、Windows 10 环境安装 1、下载与解压 首先&#xff0c;访问Apache Kafka的官方下载地址&#xff1a; https://kafka.apache.org/downloads 在本教程中&#xff0c;我们将使用kafka_2.13-2.8.1版本作为示例。下载完成后&#xff0c;解压到您的工作目录的合适位置&#xff…

操作系统—系统调用(实验)

文章目录 系统调用1.实验目标2.实验过程记录(1).理解系统调用接口(2).阅读argraw、argint、argaddr和argstr(3).理解系统调用的解耦合实现方式(4).wait系统调用的非阻塞选项实现(5).yield系统调用的实现 3.存在的问题及解决方案实验小结 系统调用 1.实验目标 阅读并了解xv6内核…

酷开科技逐步为用户构建健全的智慧家庭生活场景

大规模与精细化人群技术则是通过大量的计算能力和精细化的运营能力&#xff0c;建立用户专属数据储存区域&#xff0c;使得用户在使用不同电视的观影偏好和兴趣能够能够得以延续。 不拘泥于自有品牌终端数量&#xff0c;酷开系统除了集成在创维电视上&#xff0c;还服务于飞利…

http是什么?http的基础知识教程详解(2024-04-24)

1、http的概念 HTTP&#xff08;超文本传输协议&#xff0c;HyperText Transfer Protocol&#xff09;是一种用于分布式、协作式、超媒体信息系统的应用层协议。 HTTP 是万维网&#xff08;WWW&#xff09;的数据通信的基础&#xff0c;设计目的是确保客户端与服务器之间的通…

CUDA的开发框架

CUDA的开发框架主要提供了一系列工具和库&#xff0c;使得开发者可以充分利用NVIDIA GPU进行高效的并行计算。以下是CUDA开发框架的一些关键组成部分。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.CUDA核心库&#xff1a;这些是构…

苍穹外卖day11 Apache ECharts 数据统计-图形报表

文章目录 前言一、Apache ECharts二、营业额统计1. 业务规则2. 接口设计3. 代码实现 三、用户统计1. 业务规则2. 接口设计3. 代码实现 四、订单统计1. 业务规则2. 接口设计3. 代码实现 五、销量排名Top101. 业务规则2. 接口设计3. 代码实现 前言 作为后端开发人员使用Echarts&…

2024年阿里云新用户购买云服务器,六大优惠活动介绍

假如你是一个初次购买阿里云服务器产品的新手用户&#xff0c;在购买阿里云服务器过程中如果直接注册账号然后通过云服务器ECS产品页下单购买可能会多花很多钱&#xff0c;作为一个老用户&#xff0c;有必要把这2024年新手用户必须了解的六大优惠活动介绍给大家&#xff0c;让大…

护眼灯到底有用吗?必选机型护眼灯十大品牌推荐

护眼灯到底有用吗&#xff1f;答案是有用的。护眼灯不是智商税&#xff0c;尤其对有娃、爱玩游戏的人士。儿童青少年近视率高&#xff0c;学习环境照明影响大。普通灯光不足以满足需求&#xff0c;蓝光频闪加剧用眼疲劳&#xff0c;导致近视。选择适合孩子的护眼灯至关重要&…

Linux--内核移植(二)移植流程及驱动修改

本文来总结一下如何将 NXP 官方提供的 Linux 内核移植到正点原子的 I.MX6U-ALPHA 开发板上。 一、官方开发板内核测试 NXP 提供的 Linux 源码肯定是可以在自己的 I.MX6ULL EVK 开发板上运行下去的&#xff0c;所以我们肯定是以 I.MX6ULL EVK 开发板为参考&#xff0…

AWVS的使用

AWVS的使用 1、使用docker拉取AWVS的镜像 docker pull secfa/docker-awvs 2.使用AWVS docker run -it -d -p 13443:3443 --cap-add LINUX_IMMUTABLE secfa/docker-awvs 3.访问 4.输入账号密码 https://hub.docker.com/r/secfa/docker-awvs 找到账号密码 username:adminadmin.…

OpenCV如何实现拉普拉斯算子的离散模拟

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV的Sobel 衍生品 下一篇 &#xff1a;OpenCV 如何实现边缘检测器 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 Laplacian&#xff08;&#xff09; 实…

Django模型继承之多表继承

在Django模型继承中&#xff0c;支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表&#xff0c;并且可以被独立查询和创建。在继承关系中&#xff0c;子类和父类之间通过一个自动创建的OneToOneField进行连接。示例代码如下&…

NCF29A1 高端阻抗匹配

一、前言 Class E 高端 L-Front 匹配集成了额外的滤波器&#xff0c;提供了足够的谐波衰减&#xff0c;使 NCF29A1 与天线在比基频更高的频率下具有相当大的增益。向 PA 提供的阻抗和输出电容与表 1 ZPAOUT 所示相同。 二、原理图 图 1 高端 L-Front 匹配原理图 1&#xff…

VNISEdit 制作安装包

1. 环境依赖 1.1. NSIS 下载 下载地址&#xff1a;https://nsis.sourceforge.io/Download 1.2. VNISEdit 下载 下载地址1&#xff1a;https://sourceforge.net/projects/hmne/ 下载 exe 安装。 下载地址2&#xff1a;https://hmne.sourceforge.net/ 可以下载 exe 安装。也…