操作系统——信号

article/2025/8/15 4:18:42

信号的概念
信号的产生
信号的注册
信号的注销
自定义信号处理方式
信号的捕捉流程
信号阻塞

信号的概念:

1.信号是一个软件中断
2.信号的种类:
kill -l命令的时候,我们会看到62种信号
1~31 : 非可靠信号, 信号有可能会丢失
34~64 : 可靠信号, 信号是不可能丢失的

信号的产生

	1.1 硬件产生ctrl + c : SIGINT(2) 发送给前台进程如何把一个进程放到后台去运行:在启动命令之后加 & 符号fg:就将刚刚放到后台的进程,放到前台来运行ctrl + z :SIGTSTP(20), 不要用,除非有特定的场景ctrl + | : SIGQUIT(3)产生核心转储文件1.产生核心转储文件的条件a.当前操作系统当中一定不要限制coredump文件的大小ulimit -a ==> core file sizeb.磁盘空间2.2.1 解引用了空指针, 进程就会收到11号信号,导致进程coredump2.2 内存访问越界,一旦进程崩溃,进程就会收到11号信号,也就会理论上产生coredump文件2.3 double free进程会受到6号信号,导致当前的进程退出,并产生coredump注:free(NULL) : linux 和 windows 下钧不会导致崩溃1.2 软件产生(1)kill 函数
int kill(pid_t pid, int sig);

pid : 要给哪一个进程发送信号
sig: 要发送的具体信号值
(2)kill -[信号] /[pid/] ->eg: kill -9 12121
(3)abort函数:
abort(pid_t pid); -->6号信号(SIGABRT) --> (double free)
谁调用该函数,谁收到6号信号
封装了kill
kill(getpid(), 6);

信号的注册

  1. 1个位图 + 1个sigquen队列
    在这里插入图片描述
    (1).sig数组不是按照long类型来使用的,而是按照bit位来使用的
    (2).每一个信号在该位图当中都存在一个与之对应的比特位
    (3).当与之对应的比特位为1的时候,表示当前进程收到了该信号
    (4).对于位图当中的bit位,每一个比特位有与之对应的信号,直到我们当前操作信号表示完毕

非可靠信号的注册
1.当进程收到一个非可靠信号
第一件事情:将非可靠信号对应的比特位更改为1
第二件事情:添加sigqueue节点到sigqueue队列当中
但是,如果在添加sigqueue节点的时候,队列种已然有了该信号的sigqueue节点,则不
添加
在这里插入图片描述
可靠信号的注册
1.如果进程收到一个可靠信号
第一件事情: 在sig位图当中更改该信号对应的比特位为1
第二件事情: 不论之前sigqueue队列当中是否存在该信号的sigqueue节点,都再次添
加sigqueue节点到sigqueue队列当中去
在这里插入图片描述

信号的注销

非可靠信号的注销
1.将该信号的sigqueue节点从sigqueue队列当中进行出队操作
2.信号在sig位图当中对应的比特位从1置为0
可靠信号的注销
1.将该信号的sigqueue节点从sigqueue队列当中进行出队操作
2.需要在判断sigqueue队列当中是否还有sigqueue节点
2.1 没有了
信号在sig位图当中对应的比特位从1置为0
2.2 还存在
不会更改sig位图当中对应的比特位从1置为0

自定义信号处理方式

1.SIG_DFL : 默认处理方式
2.SIG_IGN : 忽略处理
SIGCHLD 信号
3.自定义信号的处理方式
signal函数

typedef void(*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
//该函数可以更改掉信号的处理动作

在这里插入图片描述
内核的源码:sched.h
find/usr -name sched.h
在这里插入图片描述
ctags
1.ctags R
ctrl + ] --> 跳转到定义
ctrl + o --> 跳转到上一次的位置

sigaction函数

int sigaction(int signum, const struct sigaction* act, struct sigaction* oldact);

signum:待更改的信号的值

struct sigaction{void(*sa handler)(int);//函数指针,报讯了内核对信号的处理方式void(*sa_sigaction)(int, siginfo_t*, void*);sigset_t sa_mask;//保存的是当进程在处理信号的时候,收到的信号int sa_flags;//SA_SIGINFO,操作系统在处理信号的时候,调用的就是sa_sigaction函数指针 //当中保存的值0,在处理信号的时候,调用sa_handler保存的函数void(*sa_restorer)(void);//预留信息
};

act: 将信号处理函数改变为act
oldact:信号之前的处理方式

int sigcmptyset(sigset_t* set);//将位图的所有比特设置为0

信号的捕捉流程

在这里插入图片描述
什么时候进入到内核空间:调用系统调用的时候,或者调用库函数的时候(库函数底层大多数
都是封装系统调用函数的)

信号阻塞

在这里插入图片描述
1.信号的阻塞,并不会干扰信号的注册!
信号该注册还是注册的,只不过当前的进程不能立即处理了
2.
2.1 当我们将block位图当中对应的信号的bite位置为1,表示当前进程阻塞该信号
2.2 当进程收到一个该信号的时候,进程还是一如既往的对该信号进行注册
2.3 当进程进入到内核空间,准备返回用户空间的时候,调用do_signal函数,这会不会立即
去处理该函数了
2.4 这里面的不会立即处理,一定不是之后不处理

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

how:告诉sigpromask函数,应该做什么操作
SIG_BLOCK: 设置某个信号为阻塞
SIG_UNBLOCK: 解除某个信号的阻塞
SIG_SETMASK: 替换阻塞位图
set : 用来设置阻塞位图
SIG_BLOCK:设置某个信号为阻塞
block(new) = block(old) | set
SIG_UNBLOCK:接触对某个信号的阻塞
block(new) = block(old) & (~set)
SIG_SETMASK:替换阻塞位图
block(new) = set
oldset: 原来的阻塞位图

SIGCHLD信号
子进程先于父进程退出,子进程会给父进程发送一个SIGCHLD信号,父进程对SIGCHLD信号默认是忽略处理的,导致子进程的资源没有被回收,成为僵尸进程。


http://chatgpt.dhexx.cn/article/xLErZUae.shtml

相关文章

信号与系统(典型信号)

1.信号的描述与信号的分类 1.1基于信号维度分类 一维信号(声音)、二维信号(图像)、三维信号(视频)、四维信号(VR中看到的信号)、…N维。 信号与系统中只讨论一维信号 1.2一维信号…

信号与系统1-概述

目录: 一、概述 1、信号与系统概念 1)信号 2)系统 2、信号的描述、分类与典型信号 1)描述方式 2)信号的分类 (1)确定信号/随机信号 (2)周期信号/非周期信号 &#xff0…

【信号与系统】(四)信号与系统概述——系统的概念及分类

文章目录 第一章 信号与系统概述1.4 系统的概念及分类1.4.1 系统定义与典型系统举例1.4.1.1 系统定义1.4.1.2 系统模型1.4.1.3 系统的状态1.4.1.4 典型系统举例 1.4.2 系统分类1.4.2.1 连续系统与离散系统1.4.2.2 动态系统与即时系统1.4.2.3 单输入单输出系统与多输入多输出系统…

信号系统 | 信号的概念与常用信号

信号的本质是函数,因此信号处理方法具有普适性,应用领域非常广泛。本篇介绍信号的基本概念以及一些典型的信号,主要参考奥本海姆的经典教材《信号与系统》,微信搜索公众号PurePlay,后台回复Oppenheim即可获取中文PDF。…

【信号与系统】(二)信号与系统概述——基本信号

文章目录 第一章 信号与系统概述1.2基本信号1.2.1 阶跃函数1.2.2 冲激函数1.2.3 冲激函数的广义函数定义1.2.4 冲激函数的取样性质1.2.4.1 f ( t ) f(t) f(t)乘以 δ ( t ) δ(t) δ(t)1.2.4.2 f ( t ) f(t) f(t)乘以 δ ( t − a ) δ(t-a) δ(t−a) 1.2.5 冲激函数的导数1.…

【信号与系统|吴大正】1:信号与系统概述

信号与系统概述 写在前面: 自己也感觉最近基础类课程开了好多坑…因为发现未来研究领域跟数字信号处理也脱离不了关系,打算从《信号系统与线性分析》开始慢慢往后补;大二下期的时候学习过了这门课,但其实现在回过头来知识也不剩多…

城市轨道交通信号系统学习笔记(二)信号系统的组成

信号系统的组成 一、列车自动控制(ATC)系统 二、车联段联锁设备 城市轨道交通信号系统通常由列车自动控制(Automatic Train Control,ATC)系统和车辆段/停车场信号控制系统两大部分组成。用于列车进路控制、列车间隔控制…

信号与系统——基本概念

目录 基础知识 信号与系统(Signals and Systems) 信号 信号的定义 信号的分类 系统 基础知识 信号理论主要包括:信号分析,信号传输,信号综合;系统理论主要包括:系统分析和系统综合 信号…

MATLAB信号与系统

目录 1.基本信号的MATLAB表示1.1.指数信号1.2.指数序列1.3.正弦型信号1.4.抽样函数Sa(t)1.5.矩形脉冲函数1.6.三角波脉冲信号1.7.单位采样序列1.8.单位阶跃序列 2.信号基本运算的MATLAB实现2.1.信号的尺度变换、翻转、时移(平移)2.2.信号的相加与相乘2.3…

《信号与系统学习笔记》—信号与系统(三)

注:本博客是基于奥本海姆《信号与系统》第二版编写,主要是为了自己学习的复习与加深。 一、单位冲激与单位阶跃函数 一)、离散时间单位脉冲和单位阶跃序列 1、单位脉冲 最简单的离散时间信号之一就是单位脉冲,或称单位样本&…

【信号与系统】

1、信号、信息与消息的差别? 消息:语音、文字、图像、图像等都是消息。 信息:消息中包含的有效或有意义的内容。 信号:信息的必须转换为电信号,才能在通信系统中传输,因此,信号是消息的载体&am…

操作系统 —— 信号

文章目录 1. 信号的感性理解2. 发送信号的方式2.1 键盘发送信号2.2 进程异常产生信号2.3 调用系统函数发送信号2.4 触发软件条件,发送信号 3. 信号的控制3.1 先来学习几个概念3.2 信号发送的本质3.3 信号的阻塞3.4 信号的捕捉初识3.5 信号捕捉的本质3.6 信号集操作函…

信号与系统--信号以及系统的介绍(一)

文章目录 一、绪论1、概述2、信号及其分类3、系统及其分类 总结 一、绪论 1、概述 课程内容 两大对象 : 信号、系统 三种分析方法:时域分析方法、频域分析方法、复频域分析方法 三大变换:傅里叶变换、拉普拉斯变换、Z变换 我们会用这些方法去…

第一章:绪论与信号系统概述

在学习通信原理之前,我们先回顾一下通信原理的数学理论基础——信号与系统讲了些什么,有哪些难以理解的问题。 下面开始第一章(以吴大正主编的第五版教材为依据,以下简称《信号》) PS:这是我复习知识时整理的&#x…

我彻底服了,大牛讲解信号与系统(通俗易懂)

我彻底服了,大牛讲解信号与系统(通俗易懂) (2015-10-13 21:22:36) 转载▼ 分类: 电力电子技术 第一课什么是卷积卷积有什么用什么是傅利叶变换什么是拉普拉斯变换 引子 很多朋友和我一样,工科电子类专业,学了一堆信号方面的课,…

3.16(杨神)

分组背包搞树形dp多叉转二叉 原理存储进行输出方案 分组背包搞树形dp 多叉转二叉 原理 左儿子&#xff0c;右兄弟 存储 for(int i1;i<n;i){xxread();yyread();vvread();//xx为yy的son。 b[xx]s[yy];s[yy]xx;value[i]vv;} 进行 不选 f[i][j]f[rr][j] 选 f[i][j]f[ll][…

一些社会运行的底层规律,和你的利益息息相关

点击上方蓝字关注「中产之路」 任志强是房地产行业为数不多敢讲真话的大佬&#xff0c;早期因为坚持讲真话&#xff0c;孜孜不倦&#xff0c;开启民智&#xff0c;观点尚未被大众认可&#xff0c;一度成为全民公敌&#xff0c;也有了“任大炮”的称号。退休后的他&#xff0c;依…

数据结构—共享栈

数据结构-栈(Ⅳ) 共享栈 利用栈底位置相对不变的特性&#xff0c;可让两个顺序栈共享一个一维数组空间&#xff0c;将两个栈的栈底分别设置在共享空间的两端&#xff0c;两个栈顶向共享空间的中间延伸。 共享栈是为了更有效地利用存储空间&#xff0c;两个栈的空间相互调节&a…

数据结构遍历顺序栈_数据结构:顺序栈的实现

数据结构&#xff1a;顺序栈的实现 1、快速开始 栈是一种遵循元素后进(Push)先出(Pop)规则的线性表&#xff0c;即最后加入的元素最先出来&#xff0c;它的实现可以用数组或者链表。 它的特点如下&#xff1a; 后入先出&#xff0c;先入后出。 除了头尾节点之外&#xff0c;每一…

Java数据结构-栈的应用

第1关&#xff1a;利用栈实现整数的十进制转八进制 本关任务&#xff1a;基于栈stack数据结构解决整数十进制转八进制的问题。 第2关&#xff1a;利用栈判断字符串括号是否匹配 本关任务&#xff1a;基于栈stack数据结构判断字符串中的括号是否匹配&#xff0c;字符串中仅包含…