波奇学Liunx:信号的产生,保存,处理

信号的产生,信号的保存,信号的处理

在操作系统中进程接受到信号会保存,产生

进程必须识别和能够处理信号,处理信号是进程的内置功能

进程收到信号时不一定会立即执行,所以进程必然有一套识别,保存,处理信号操作

前后台进程

前后台进程:前台进程可以用ctrl + C删掉,后台进程用kill指令。

前后台的区别是进程能否获取键盘输入,且前台进程允许会阻止命令行输入。

(当进程运行,bash进程是后台的,所以无法输入命令)

前台和后台进程是一个bash进程,前台只有一个,后台进程可以有多个。

键盘输入首先是被前台进程收到的,ctrl + C首先是被前台收到的,本质上是2号信号

进入后台进程

信号

没有0号,32,33信号

1~31信号是普通信号,34~64是实时信号不考虑。

信号在linux系统中是宏。

接收到信号的操作三选一

默认动作

忽略

自定义动作

自定义收到信号的动作

signum:接收到的信号

handler 函数指针,接收到信号signum时,调用的函数

#include<iostream>
#include<unistd.h>
#include<signal.h>using namespace std;void myhandler(int signo)
{cout<<"Process get a signal"<<signo <<endl;exit(1);
}
int main()
{signal(SIGINT,myhandler); //signal只用设置一次while(true){cout<<"hello linux"<<std::endl;sleep(1);}return 0;
}

这么看来signal函数不是创建新的进程,内部调用回调函数,而是一种设置,一种相关联。面向是一整个进程的。

键盘数据是如何输入给内核的,ctrl+C是如何变成信号的?

键盘是OS先知道,OS是怎么知道键盘上有数据?

键盘上有数据通过硬件中断发送信号到CPU,不同的硬件有不同的中断号。发送中断号的过程就是向cpu某个针角充放电,向寄存器上写入数据。

内核中有中断向量表里都是方法地址,方法是访问外设的方法,主要是磁盘,显示器,键盘

键盘有数据->发送中断号到cpu->cpu通知->操作系统读取中断向量表的方法->读取外设数据。

操作系统不再需要轮询外设,只需要等待CPU信号

信号是对这个套方法的模拟

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

软中断相对于硬中断而言,前者是对后者模拟

异步通知:等待信号和代码运行并行的,进程一边等待着信号,一边运行代码

不是所有信号都可以被signal捕捉的,如19号(暂停进程),9号(杀掉进程)

产生信号的方式

键盘

命令行kill命令

kill -9 pid //向进程发送信号9

系统调用

kill函数

raise发送一个信号给调用该函数的进程

abort终止程序

无论信号如何产生,最终都一定是操作系统发送给进程的。

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

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

相关文章

Leetcode 3066. Minimum Operations to Exceed Threshold Value II

Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解题思路2. 代码实现 题目链接&#xff1a;Leetcode 3066. Minimum Operations to Exceed Threshold Value II 1. 解题思路 这一题的话只需要排序之后按照题目条件逐一进行执行直至满足条件即可。 唯一…

Pytorch中,dim形象化的确切意义是什么?

在Pytorch中涉及张量的操作都会涉及“dim”的设置&#xff0c;虽然也理解个大差不差&#xff0c;但是偶尔还是有点犯迷糊&#xff0c;究其原因还是没有形象化的理解。 首先&#xff0c;张量的维度排序是有固定顺序的&#xff0c;0&#xff0c;1&#xff0c;2&#xff0c;.....…

(1)预处理

我们需要的文件结构如上 main.cpp add.h add.cpp add.h 这里使用riscv的工具链编译为.i文件&#xff0c;需要使用-E&#xff0c;就是只进行预处理&#xff0c;我们可以得到两个.i文件即main.i和add.i main.i 这里看到main.i里头文件全部替换&#xff0c;然后多了三万多行 所以…

Leetcode 3068. Find the Maximum Sum of Node Values

Leetcode 3068. Find the Maximum Sum of Node Values 1. 解题思路2. 代码实现 题目链接&#xff1a;3068. Find the Maximum Sum of Node Values 1. 解题思路 这一题虽然标记为一道hard的题目&#xff0c;但其实就是一个脑筋急转弯的题目。 我们只需要想明白一点即可&…

4G/5G执法记录仪、智能安全帽走国标GB28181接入海康、宇视等大平台,也可走平台与平台对接,以下级平台级联到上级大平台

AIoT万物智联&#xff0c;智能安全帽生产厂家&#xff0c;执法记录仪生产厂家&#xff0c;智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、无人机4G补传系统等统一接入大型融合通信可视指挥调度平台VM…

Vue3和ElementPlus封装table组件

最近学习vue3.2并自己在写一个项目&#xff0c;然后发现好几个页面都是列表页&#xff0c;重复写table和column也是觉得累&#xff0c;学习的项目列表页不算多&#xff0c;要是公司项目就不一样了&#xff0c;所以就想着自己封装一个table组件&#xff0c;免去大量重复工作和co…

滑动窗口

题目 思路 对于一个数组区间的最值&#xff0c;可以开辟一个队列记录&#xff08;当然这里不能叫队列只是和队列相似&#xff0c;习惯性叫法)。 每个区间的最值等于队首元素。扫描数组时&#xff0c;如果该元素大于队尾元素&#xff08;取最大值时&#xff09;将该队尾元素出队…

Effective C++ 学习笔记 条款07 为多态基类声明virtual析构函数

有许多种做法可以记录时间&#xff0c;因此&#xff0c;设计一个TimeKeeper base class和一些derived classes作为不同的计时方法很合理&#xff1a; class TimeKeeper { public:TimeKeeper();~TimeKeeper();// ... };class AtomicClock : public TimeKeeper { /* ... */ }; …

DM数据库学习之路(二十)DM8基于主备集群技术的两地三中心集群部署及测试(全网最详细)

DM两地三中心介绍 摘要 金融行业对数据的可靠性和连续性有着极其严格的要求,任何数据丢失或服务中断都可能导致严重的经济损失。针对这一问题,基于达梦主备集群技术的两地三中心解决方案能够切实有效解决业务数据的可靠性和连续性需求。该方案通过构建两个数据中心和一个灾备…

MyBatis标签获取数组或者集合长度的方法

1、判断列表长度&#xff1a; <if test"list ! null and list.size() > 0">... </if> 可结合in条件使用&#xff1a;SELECT * FROM users<where><if test"idList ! null and idList.size() > 0">id IN<foreach item"…

leetcode热题100学习计划-链表-相交链表

思路 两条链表长短不一&#xff0c;找公共交点必须先对齐。记录两个链表各自长度&#xff0c;长的向短的看齐&#xff0c;长的先走多出来的那么一截&#xff0c;之后两者一起走&#xff0c;直到相遇或抵达末尾 代码 /*** Definition for singly-linked list.* public class …

解密Lawnchair:打造个性化极致的Android桌面体验

解密Lawnchair&#xff1a;打造个性化极致的Android桌面体验 1. 简介 Lawnchair是一款知名的Android桌面定制工具&#xff0c;旨在为用户提供个性化极致的桌面体验。作为一个开源项目&#xff0c;Lawnchair融合了简洁、灵活和强大的特点&#xff0c;让用户能够自由定制其Andro…

Python | Conda安装包报错:PackagesNotFoundError

Conda在下载安装包时报错&#xff1a; PackagesNotFoundError: The following packages are not available from current channels:- XXXXXX&#xff08;包名&#xff09;有如下两种解决方法&#xff1a; 方法一&#xff1a;将conda-forge添加到搜索路径上 在命令行运行下方指令…

深入理解C语言:开发属于你的三子棋小游戏

三子棋 1. 前言2. 准备工作3. 使用二维数组存储下棋的数据4. 初始化棋盘为全空格5. 打印棋盘6. 玩家下棋7. 电脑下棋8. 判断输赢9. 效果展示10. 完整代码 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼&#xff0c;今天我们会用C语言实现三子棋。所谓三子棋&#xff0c;就是…

Android 开发环境搭建的步骤

本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具&#xff0c;以下是一些基础步骤&#xff1a; 1. 安装 Java Development Kit (JDK) 首先&#xff0c;您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础&#xf…

TS总结10、ts的 class 类型(配置项strictPropertyInitialization、非空断言)

一、简介 1.类(class)是面向对象编程的基本构件,封装了属性和方法 1.1、属性的类型:类的属性可以在顶层声明,也可以在构造方法内部声明,如果不给出类型;TypeScript 会认为x和y的类型都是any;如果声明时给出初值,可以不写类型,TypeScript 会自行推断属性的类型; c…

【Android 内存优化】怎么理解Android PLT hook?

文章目录 前言什么是hook?PLT hook作用基本原理PLT hook 总体步骤 代码案例分析方案预研面临的问题怎么做&#xff1f;ELFELF 文件头SHT&#xff08;section header table&#xff09; 链接视图&#xff08;Linking View&#xff09;和执行视图&#xff08;Execution View&…

2核4G服务器咋收费的?阿里云贵不贵?

阿里云2核4G服务器多少钱一年&#xff1f;2核4G配置1个月多少钱&#xff1f;2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

YOLO-World 简单无需标注无需训练直接可以使用的检测模型

参考: https://github.com/AILab-CVC/YOLO-World YOLO-World 常规的label基本不用训练,直接传入图片,然后写入文本label提示既可 案例demo: 1)官方提供 https://huggingface.co/spaces/stevengrove/YOLO-World https://huggingface.co/spaces/SkalskiP/YOLO-World 检测…

基于信息间隙决策理论的碳捕集电厂优化调度程序代码!

适用平台&#xff1a;MatlabYalmipCplex 程序在建立电厂与碳捕集装置协同调度模型的基础上&#xff0c;引入信息间隙决策理论(information gap decision theory, IGDT)以同时满足系统的鲁棒性和经济性要求&#xff0c;通过风险追求和风险规避&#xff12;种决策角度得到不同的…