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

2024-03-04 19:44

本文主要是介绍波奇学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终止程序

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

这篇关于波奇学Liunx:信号的产生,保存,处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/774240

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

明明的随机数处理问题分析与解决方案

明明的随机数处理问题分析与解决方案 引言问题描述解决方案数据结构设计具体步骤伪代码C语言实现详细解释读取输入去重操作排序操作输出结果复杂度分析 引言 明明生成了N个1到500之间的随机整数,我们需要对这些整数进行处理,删去重复的数字,然后进行排序并输出结果。本文将详细讲解如何通过算法、数据结构以及C语言来解决这个问题。我们将会使用数组和哈希表来实现去重操作,再利用排序算法对结果

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)

使用协程实现高并发的I/O处理

文章目录 1. 协程简介1.1 什么是协程?1.2 协程的特点1.3 Python 中的协程 2. 协程的基本概念2.1 事件循环2.2 协程函数2.3 Future 对象 3. 使用协程实现高并发的 I/O 处理3.1 网络请求3.2 文件读写 4. 实际应用场景4.1 网络爬虫4.2 文件处理 5. 性能分析5.1 上下文切换开销5.2 I/O 等待时间 6. 最佳实践6.1 使用 as

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词

列举你能想到的UNIX信号,并说明信号用途

信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。 UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号;SIGKILL表示终止程序运行的信号,等等。信号量编程是UNIX下非常重要的一种技术。 Unix信号量也可以