Linux进程信号(一)之信号的入门
文章目录
- 信号入门
- 1. 生活角度的信号
- 2. 技术应用角度的信号
- 3. 注意
- 4. 信号概念
- 5.用kill -l命令可以察看系统定义的信号列表
- 6. 信号处理常见方式
信号入门
1. 生活角度的信号
你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,
你该怎么处理快递。也就是你能“识别快递”
当快递员到了你楼下,你也收到快递到来的通知,但是你正在打游戏,需5min之后才能去取快递。
那么在这5min之内,你并没有下去去取快递,但是你是知道有快递到来了。
也就是取快递的行为并不是一定要立即执行,可以理解成“在合适的时候去取”。
在收到通知,再到你拿到快递期间,是有一个时间窗口的,
在这段时间,你并没有拿到快递,但是你知道有一个快递已经来了。
本质上是你“记住了有一个快递要去取”。
当你时间合适,顺利拿到快递之后,就要开始处理快递了。
而处理快递一般方式有三种:
- 执行默认动作(幸福的打开快递,使用商品)
- 执行自定义动作(快递是零食,你要送给你你的女朋友)
- 忽略快递(快递拿上来之后,扔掉床头,继续开一把游戏)
快递到来的整个过程,对你来讲是异步的,你不能准确断定快递员什么时候给你打电话。
进程就是你,操作系统就是快递员,信号就是快递。
信号举例:信号弹、上下课铃声、红绿灯、快递发短信取件码、狼烟、发令枪、闹钟等……
问题:
a.你(进程)怎么认识这些信号的?有人教 - > 我记住了
认识:1.识别信号 2.(进程)知道信号产生后的处理方法
b.即便是现在没有信号产生,但我也知道信号产生之后,我该干什么
c.信号产生了,我们可能并不会立即处理这个信号,
在合适的时候再处理,因为我们可能在处理更重要的事情。
– 所以信号产生 ---------时间窗口---------> 信号处理
在这个时间窗口内,必须记住信号的到来!
结论:
-
进程 必须 能够识别+处理信号 – 信号没有产生,也要具备处理信号的能力。
– 信号的处理能力,属于进程内置功能的一部分!
-
进程即便是没有收到信号,也能知道哪些信号该怎么处理。
-
当进程真的收到了一个具体的信号的时候,进程可能并不会立即处理这个信号,
因为进程可能在运行更重要的代码(优先级更高),进程会在合适的时候处理这个信号。
-
一个进程当信号产生到信号开始被处理,中间一定会有时间窗口,
所以进程具有临时保存 哪些信号已经发生了的 能力。
2. 技术应用角度的信号
makefile
myprocess:mysignal.ccg++ -o $@ $^ -std=c++11
.PHONY:clean
clean:rm -rf myprocess
mysignal.cc
#include<iostream>
#include<unistd.h>
#include<signal.h>using namespace std;int main()
{while(1){cout<<"I am a crazy process,pid: "<<getpid()<<endl;sleep(1);}return 0;
}
运行结果:
前台进程:
后台进程:
ctrl + c
是输入给前台进程(bash
),所以myprocess
不会终止。
bash
进程收到了ctrl + c
为什么不退出,因为bash
对这个信号做了特定的处理。
Linux中,一次登录,一个终端,一般会配上一个bash
,每一个登录,
只允许一个进程是前台进程,可以允许多个进程是后台进程!
bash
是一个前台进程,允许bash
接受用户指令,
但是当你的代码(./myprocess
)跑起来了,你的进程就变成了前台进程,
bash
就变成了后台进程,所以你输入ls
、pwd
输给了myprocess
,
myprocess
不会对你输出的字符串做处理,所以就没用了。
前台进程、后台进程的本质区别:谁来获取键盘输入(就是前台)。
看似信息干扰了,但是实际上并没有干扰。
在键盘输入不会被干扰,回现到显示器上是乱的而已。(输出上互相干扰)
显示器文件、键盘文件都有独立的缓冲区,所以输入不会乱。
输出为什么会乱呢?
因为多进程访问显示器资源,显示器文件就叫共享资源(没有保护机制),所以就会乱。
ctrl + c
为什么可以杀掉前台进程?
键盘输入首先是被前台进程收到的!
ctrl + c
本质是被进程解释为收到了2号信号。
进程收到2号信号的默认动作就是终止自己这个进程。
验证:
signal
函数就是修改特定进程对信号的处理动作的!
mysignal.cc
#include<iostream>
#include<unistd.h>
#include<signal.h>using namespace std;//int signum: 收到了哪个信号
void Handler(int signum)
{cout<<"process get a signal: "<<signum<<endl;
}int main()
{signal(SIGINT,Handler);//只需要设置一次,在进程生命周期内都有效。while(1){cout<<"I am a crazy process,pid: "<<getpid()<<endl;sleep(1);}return 0;
}
- 这个进程不退出了,默认处理动作是退出,我们已经捕捉了这个信号,
所以不再执行默认动作,转而执行自定义动作。(三个动作,三选一)
signal
函数调用Handler
方法是在收到信号的时候触发的!而不是调用signal函数时触发的。
如果后续没有收到这个信号,那么Handler
方法将永远不会被调用。
-
我们可以把所有的信号的处理方法都设置成同一个,
Handler
要知道是因为收到哪个信号而调用这个方法的。
键盘数据是如何输入给内核的,ctrl+c又是如何变成信号的–谈谈硬件
用户按下Ctrl-C ,这个键盘输入产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程。
前台进程因为收到信号,进而引起进程退出。
3. 注意
-
Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,
这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。
-
Shell可以同时运行一个前台进程和任意多个后台进程,
只有前台进程才能接到像 Ctrl-C 这种控制键产生的信号。
-
前台进程在运行过程中用户随时可能按下 Ctrl-C 而产生一个信号,
也就是说该进程的用户空间代码执行到任何地方都有可能收到 SIGINT 信号而终止
所以信号相对于进程的控制流程来说是异步(Asynchronous)的。
4. 信号概念
信号是进程之间事件异步通知的一种方式,属于软中断。
5.用kill -l命令可以察看系统定义的信号列表
一共62种,1-32号是普通信号,34-64是实时信号。
普通信号:信号产生了可以不立即处理。
实时信号:一旦产生必须立即(尽快)处理。
-
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在
signal.h
中找到,例如其中有定 义
#define SIGINT 2
-
编号34以上的是实时信号,暂不讨论实时信号。
普通信号:进程收到了n次普通信号,但是来不及处理信号,所以最后只会当作一次信号来处理。
实时信号:
a. 实时信号一到来,那么进程必须立即处理!
b. 进程收到10次实时信号,就要执行10次实时信号。(不能丢失)
管理实时信号使用队列。
-
这些信号各自在什么条件下产生,默认的处理动作是什么
在signal(7)中都有详细说明: man 7 signal
6. 信号处理常见方式
(sigaction
函数),可选的处理动作有以下三种:
- 忽略此信号。(忽略)
- 执行该信号的默认处理动作。(默认动作)
- 提供一个信号处理函数。(自定义动作)
要求内核在处理该信号时切换到用户态执行这个处理函数(自定义动作),
这种方式称为捕捉(Catch
)一个信号。
相关文章:
Linux进程信号(一)之信号的入门
文章目录 信号入门1. 生活角度的信号2. 技术应用角度的信号3. 注意4. 信号概念5.用kill -l命令可以察看系统定义的信号列表6. 信号处理常见方式 信号入门 1. 生活角度的信号 你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也…...
腾讯云MCP数据智能处理:简化数据探索与分析的全流程指南
引言 在当今数据驱动的商业环境中,企业面临着海量数据处理和分析的挑战。腾讯云MCP(Managed Cloud Platform)提供的数据智能处理解决方案,为数据科学家和分析师提供了强大的工具集,能够显著简化数据探索、分析流程,并增强数据科学…...
曝光融合(Exposure Fusion)
一、背景介绍 图像融合算法里面,hdr图像进行融合,拓宽动态范围的操作非常常见。 常用的hdr融合算法通常有两类: 1、不同曝光的ldr图像先进行hdr融合,得到高bit位的hdr图像,再通过tonemaping算法得到结果如图像。 2、不…...
无人机减震模块运行与技术要点分析!
一、减震模块的运行方式 1. 多级减震结构 两级减震设计:采用第一级减震组件(如减震球、锥面减震垫)吸收高频振动,第二级减震组件(如减震环、负重物)进一步过滤低频振动。例如,通过硅胶减震球…...
CVPR2025 | 首个多光谱无人机单目标跟踪大规模数据集与统一框架, 数据可直接下载
论文介绍 题目:MUST: The First Dataset and Unified Framework for Multispectral UAV Single Object Tracking 期刊:IEEE/CVF Computer Vision and Pattern Recognition Conference 论文:https://arxiv.org/abs/2503.17699 数据&#x…...
嵌入式故障码管理系统设计实现
文章目录 前言一、故障码管理系统概述二、核心数据结构设计2.1 故障严重等级定义2.2 模块 ID 定义2.3 故障代码结构2.4 故障记录结构 三、故障管理核心功能实现3.1 初始化功能3.2 故障记录功能3.3 记录查询与清除功能3.4 系统自检功能 四、故障存储实现4.1 Flash 存储实现4.2 R…...
若依框架Consul微服务版本
1、最近使用若依前后端分离框架改造为Consul微服务版本 在这里分享出来供大家参考 # Consul微服务配置参数已经放置/bin/Consul微服务配置目录 仓库地址: gitee:https://gitee.com/zlxls/Ruoyi-Consul-Cloud.git gitcode:https://gitcode.c…...
【风控】用户特征画像体系
一、体系架构概述 1.1 核心价值定位 风控特征画像体系是通过多维度数据融合分析,构建客户风险全景视图的智能化工具。其核心价值体现在: 全周期覆盖:贯穿客户生命周期的营销、贷前、贷中、贷后四大场景立体化刻画:整合基础数据…...
【Java微服务组件】分布式协调P1-数据共享中心简单设计与实现
欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 欢迎评论交流,感谢您的阅读😄。 目录 引言设计一个共享数据中心选择数据模型键值对设计 数据可靠性设计持久化快照 (…...
数据库--向量化基础
本文包含内容有: 向量化、SIMD的概念及关系SSE,AVX-512八种基础的SIMD操作,并用具体例子解释,给出伪代码。一、快速了解向量化、SIMD 1.1 向量化 向量化是指将原本需要循环处理的多个数据元素,通过一条指令同时处理多个数据,从而减少循环次数,提高计算效率。 传统方式…...
handsome主题美化及优化:10.1.0最新版 - 2
文章目录 前言基础设置优化开启全站 HTTPS添加 GZIP 压缩美化永久链接自定义后台路径启用 Emoji 支持 功能增强每日新闻自动更新文章嵌入外部网页时光机栏目配置自定义音乐播放器音量 自定义CSS配置文章标题居中显示标题背景美化文章版式优化LOGO 扫光特效头像动画效果图片悬停…...
JWT令牌
1. JWT概述 JWT即JSON Web Token,是一个开放标准,用于在各方之间安全地传输信息。并且JWT经过数字签名,安全性高。通俗来说,也就是以JSON形式作为Web应用中的令牌,用于信息传输,在数据传输过程中可以完成数…...
Qwen3技术报告解读
https://github.com/QwenLM/Qwen3/blob/main/Qwen3_Technical_Report.pdf 节前放模型,大晚上的发技术报告。通义,真有你的~ 文章目录 预训练后训练Long-CoT Cold StartReasoning RLThinking Mode FusionGeneral RLStrong-to-Weak Distillation 模型结构…...
RAG-MCP:突破大模型工具调用瓶颈,告别Prompt膨胀
大语言模型(LLM)的浪潮正席卷全球,其强大的自然语言理解、生成和推理能力,为各行各业带来了前所未有的机遇。然而,正如我们在之前的探讨中多次提及,LLM并非万能。它们受限于训练数据的时效性和范围…...
Flask框架入门与实践
Flask框架入门与实践 Flask是一个轻量级的Python Web框架,以其简洁、灵活和易于上手的特点深受开发者喜爱。本文将带您深入了解Flask的核心概念、基本用法以及实际应用。 什么是Flask? Flask是由Armin Ronacher于2010年开发的微型Web框架。与Django等…...
PD 分离推理的加速大招,百度智能云网络基础设施和通信组件的优化实践
为了适应 PD 分离式推理部署架构,百度智能云从物理网络层面的「4us 端到端低时延」HPN 集群建设,到网络流量层面的设备配置和管理,再到通信组件和算子层面的优化,显著提升了上层推理服务的整体性能。 百度智能云在大规模 PD 分离…...
罗杰斯高频板技术解析:低损耗基材如何定义 5G 通信未来
在 5G 通信与尖端电子技术加速融合的时代,高频 PCB 作为信号传输的核心载体,对材料性能与工艺精度提出了极致要求。猎板 PCB 深耕行业多年,始终以罗杰斯(Rogers)板材为核心介质,构建起从材料适配到精密制造…...
QML 动画控制、顺序动画与并行动画
目录 引言相关阅读基础属性说明工程结构示例代码解析示例1:手动控制动画(ControlledAnimation.qml)示例2:顺序动画(SequentialAnimationDemo.qml)示例3:并行动画(ParallelAnimationD…...
【动态导通电阻】GaN HEMT动态导通电阻的精确测量
2023 年 7 月,瑞士洛桑联邦理工学院的 Hongkeng Zhu 和 Elison Matioli 在《IEEE Transactions on Power Electronics》期刊发表了题为《Accurate Measurement of Dynamic ON-Resistance in GaN Transistors at Steady-State》的文章,基于提出的稳态测量方法,研究了氮化镓(…...
2:OpenCV—加载显示图像
加载和显示图像 从文件和显示加载图像 在本节中,我将向您展示如何使用 OpenCV 库函数从文件加载图像并在窗口中显示图像。 首先,打开C IDE并创建一个新项目。然后,必须为 OpenCV 配置新项目。 #include <iostream> #include <ope…...
Qt控件:交互控件
交互控件 1. QAction核心功能API 1.2 实例应用情况应用场景 1. QAction ##1. 1简介与API QAction 是一个核心类,用于表示应用程序中的一个操作(如菜单项、工具栏按钮或快捷键触发的功能)。它将操作的逻辑与 UI 表现分离,使代码更…...
在vue3中使用Cesium的保姆教程
1. 软件下载与安装 1. node安装 Vue.js 的开发依赖于 Node.js 环境,因此我们首先需要安装 Node.js。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许你在服务器端运行 JavaScript 代码,同时也为前端开发提供了强大的工具支…...
zst-2001 下午题-历年真题 试题一到三
试题一 问题一 1 问题一 2 注意每句话中的“给”… 问题一 3 问题二 1 问题二 2 问题二 3 问题三 1 步骤一.看父图的数据流在子图有没有缺失 步骤二.看加工有没有输入输出 步骤三.阅读理解 问题三 2 实体和存储不能划线 问题三 3 试题二 问题一 1 问题一 2 问题一 3 问题二…...
STM32的ADC模块中,**采样时机(Sampling Time)**和**转换时机(Conversion Time),获取数据的时机详解
在STM32的ADC模块中,**采样时机(Sampling Time)和转换时机(Conversion Time)**是ADC工作流程中的两个关键阶段,直接影响采样精度和系统实时性。以下是详细解析: 1. 采样时机(Samplin…...
iOS音视频解封装分析
首先是进行解封装的简单的配置 /// 解封装配置 class KFDemuxerConfig {// 媒体资源var asset: AVAsset?// 解封装类型,指定是音频、视频或两者都需要var demuxerType: KFMediaType .avinit() {} }然后是实现解封装控制器 import Foundation import CoreMedia i…...
探究电阻分压的带负载能力
我们经常使用两个电阻去分压来获得特定的电压,那么我是两个大阻值电阻分压获得的电压驱动能力强,还是小阻值电阻分压得到的电压驱动能力强呢? 一、电压相同时,电流的大小 下面是两个阻值分压得到的仿真图 电路分析: VCC都是5V,探针1和探针2测到的电压都是1.67V; 根据…...
14、Python时间表示:Unix时间戳、毫秒微秒精度与time模块实战
适合人群:零基础自学者 | 编程小白快速入门 阅读时长:约5分钟 文章目录 一、问题:计算机中的时间的表示、Unix时间点?1、例子1:计算机的“生日”:Unix时间点2、答案:(1)U…...
PCL 绘制二次曲面
文章目录 一、简介二、实现代码三、实现效果一、简介 这里基于二次曲面的公式: z = a 0 + a 1 x + a 2 y + a...
消息队列与Kafka基础:从概念到集群部署
目录 一、消息队列 1.什么是消息队列 2.消息队列的特征 3.为什么需要消息队列 二、Kafka基础与入门 1.Kafka基本概念 2.Kafka相关术语 3.Kafka拓扑架构 4.Topic与partition 5.Producer生产机制 6.Consumer消费机制 三、Zookeeper概念介绍 1.zookeeper概述 2.zooke…...
计算机指令分类和具体的表示的方式
1.关于计算机的指令系统 下面的这个就是我们的一个简单的计算机里面涉及到的指令: m就是我们的存储器里面的地址,可以理解为memory这个意思,r可以理解为rom这样的单词的首字母,帮助我们去进行这个相关的指令的记忆,不…...
pcie phy-电气层-gen1/2(TX)
S IP物理层讲解 在synopsys IP中对于phy层的内容分离的比较多: cxpl中: u_cx_phy_logical:包含ts序列的解析(smlh); pipe层协议的转换(rmlh,xmlh);pipe转dllp包(rplh&…...
Baklib加速企业AI数据智理转型
Baklib智理AI数据资产 在AI技术深度渗透业务场景的背景下,Baklib通过构建企业级知识中台架构,重塑了数据资产的治理范式。该平台采用智能分类引擎与语义分析模型,将分散在邮件、文档、数据库中的非结构化数据转化为标准化的知识单元…...
深度学习驱动下的目标检测技术:原理、算法与应用创新
一、引言 1.1 研究背景与意义 目标检测作为计算机视觉领域的核心任务之一,旨在识别图像或视频中感兴趣目标的类别,并确定其在图像中的位置,通常以边界框(Bounding Box)的形式表示 。其在现实生活中有着极为广泛且…...
window 显示驱动开发-使用有保证的协定 DMA 缓冲区模型
Windows Vista 的显示驱动程序模型保证呈现设备的 DMA 缓冲区和修补程序位置列表的大小。 修补程序位置列表包含 DMA 缓冲区中命令引用的资源的物理内存地址。 在有保证的协定模式下,用户模式显示驱动程序知道 DMA 缓冲区和修补程序位置列表的确切大小,…...
《指针与整数相加减的深入解析》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、指针与整数相加的原理二、指针与整数相减的原理三、使用场景(一)数组操作(二)内存遍历 四、注意事项&…...
C++_STL_map与set
1. 关联式容器 在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、 forward_list(C11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面 存储的是元素本身。那什么是…...
1949-2022年各省农作物播种面积数据(22个指标)
1949-2022年各省农作物播种面积数据(22个指标) 1、时间:1949-2022年 2、来源:各省年鉴、国家统计局、农业部、农业年鉴 3、范围:31省 4、指标:年度标识、省份编码、省份名称、农作物总播种面积、粮食作…...
汽车二自由度系统模型以及电动助力转向系统模型
汽车二自由度系统模型与电动助力转向系统(EPS)的详细建模方案,包含理论推导、MATLAB/Simulink实现代码及参数说明: 一、二自由度汽车模型 1. 模型描述 包含以下两个自由度: 横向运动(侧向加速度…...
【学习笔记】计算机操作系统(四)—— 存储器管理
第四章 存储器管理 文章目录 第四章 存储器管理4.1 存储器的层次结构4.1.1 多层结构的存储器系统4.1.2 主存储器与寄存器4.1.3 高速缓存和磁盘缓存 4.2 程序的装入和链接4.2.1 程序的装入4.2.2 程序的链接 4.3 连续分配存储管理方式4.3.1 单一连续分配4.3.2 固定分区分配4.3.3 …...
51单片机的lcd12864驱动程序
#include <reg51.h> #include <intrins.h>#define uchar...
(03)数字化转型之库存管理:从进库到出库的数字化运营
在当今竞争激烈的商业环境中,高效的库存管理已成为企业降低成本、提高运营效率的关键。本文将系统性地介绍库存管理的全流程,包括进库、出库、移库、盘点等核心环节,帮助企业构建科学合理的库存管理体系。 一、进库管理:从计划到执…...
windows编程中加载DLL的两种典型方式的比较
文章目录 DLL定义头文件定义CPP实现DLL的调用代码直接使用通过LoadLibrary调用导入表的依赖LoadLibrary使用DLL库中的类DLL中定义工厂函数调用时的代码补充:为什么LoadLibrary不能直接导出类在windows的编程中,使用DLL是一个非常常见的操作。一般来说,有两种集成DLL的方式:…...
存储器上如何存储1和0
在计算机存储器中,数据最终以**二进制形式(0和1)**存储,这是由硬件特性和电子电路的物理特性决定的。以下是具体存储方式的详细解析: 一、存储的物理基础:半导体电路与电平信号 计算机存储器(…...
【笔记】记一次PyCharm的问题反馈
#工作记录 最近更新至 PyCharm 社区版的最新版本后,我遇到了多个影响使用体验的问题。令人感到不便的是,一些在旧版本中非常便捷的功能,在新版本中却变得操作复杂、不够直观。过去,我一直通过 PyCharm 内置的故障报告与反馈机制反…...
logrotate按文件大小进行日志切割
✅ 编写logrotate文件,进行自定义切割方式 adminip-127-0-0-1:/data/test$ cat /etc/logrotate.d/test /data/test/test.log {size 1024M #文件达到1G就切割rotate 100 #保留100个文件compressdelaycompressmissingoknotifemptycopytruncate #这个情况服务不用…...
基于大模型的脑出血智能诊疗与康复技术方案
目录 一、术前阶段1.1 数据采集与预处理系统伪代码实现流程图1.2 特征提取与选择模块伪代码实现流程图1.3 大模型风险评估系统伪代码实现流程图二、术中阶段2.1 智能手术规划系统伪代码实现流程图2.2 麻醉智能监控系统伪代码实现流程图三、术后阶段3.1 并发症预测系统伪代码片段…...
P21-RNN-心脏病预测
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、RNN 循环神经网络(Recurrent Neural Network,简称 RNN)是一类以序列数据为输入,在序列的演进方向进行递归…...
懒汉式单例模式的线程安全实现
懒汉式单例模式的线程安全实现 懒汉式单例模式的核心特点是延迟实例化(在第一次使用时创建对象),但其基础实现存在线程安全问题。以下是不同线程安全实现方式的详细说明和对比: 1. 非线程安全的基础懒汉式 public class UnsafeLazySingleton {private static UnsafeLazyS…...
Java 常用的Arrays函数
文章目录 ArrayssorttoStringbinarySearchequalsfill 数组拷贝copyOfcopyOfRangearraycopy 二维数组定义遍历deepToString空指针异常 Arrays sort int[] array new int[]{1,20,3}; Arrays.sort(array);// 1 3 20toString 帮助数组转为字符串 int[] array new int[]{1,2,3…...
FEKO许可证与版本兼容性问题
随着电磁仿真技术的不断进步,FEKO软件不断更新迭代,为用户提供更强大的功能和更优秀的性能。然而,在升级过程中,FEKO许可证与版本兼容性问题往往成为用户关注的焦点。本文将为您详细解读FEKO许可证与版本兼容性问题,帮…...