Linux——信号知识归纳(下)

news2024/11/19 16:31:42

目录

一.进程状态

二.信号捕捉时机与流程

三.sigaction函数

四.SIGCHLD信号


一.进程状态

linux将进程的状态分为用户态(user mode)和内核态(kernel mode)。

内核态时CPU执行代码不受任何限制,而用户态会做代码安全的相关检查,不能直接访问内核数据。一般而言,执行代码不会进入内核态,防止用户破坏内核数据和操作系统。

但有时需要进入内核态,比如当执行系统调用接口时就是典型进程状态转换过程。

以执行系统提供的open函数,其过程如下:

1.进程执行到open的代码,CPU取得open函数地址。(用户态)

2.跳转到open函数地址(在虚拟地址空间的内核区)。(用户态)

3.页表映射到物理内存中open函数的位置。(用户态)

4.真正开始执行open函数。(用户态)

5.open函数内部使用中断interrupt 80使CPU中断。(用户态)

6.CPU中断后,其中CR3寄存器由用户态改为内核态。

7.继续执行open内部代码

8.open函数执行完毕后,操作系统再将CPU内部寄存器改为用户态。

二.信号捕捉时机与流程

信号的捕捉时机是进程由内核态转为用户态时。

信号捕捉的具体流程如下图所示:
如果信号函数是自定义的那么需要先切换成用户态去执行自定义函数,之所以不直接在内核态执行,是因为内核态不会检查代码安全,防止自定义函数中有破坏内核的代码危害系统安全。

由此,我们不难发现,如果按照自定义函数的处理方式,那么信号捕捉的过程就是四个状态的转化。

即用户态->内核态->用户态->内核态->用户态。

图形表示大致如下:

三.sigaction函数

sigaction函数用于自定义信号函数

第一个参数为信号值。

第二个参数是sigaction类型指针

sigaction是linux自带的类型,本质是一个结构体

第三个参数也是sigaction类型,是输出型参数,接收旧的sigaction类型对象。

使用方式如下:

void func(int signum){
    cout << "发送2号信号" << endl;
}

int main(){
    struct sigaction sa, oldsa;
    sa.sa_flags = 0;
    sigemptyset(&sa.sa_mask);//block位图置为0,全不阻塞
    sa.sa_handler = func;//使用自定义函数
    sigaction(2, &sa, &oldsa);
    sleep(3);

    return 0;
}

 

四.SIGCHLD信号

当子进程暂停或退出时会向父进程发送该信号。

默认处理方式为忽略,子进程退出后若父进程不回收将变成僵尸进程。

但是,该信号存在特殊情况,即当使用signal函数自定义处理方式为SIG_IGN时,虽然处理方式依旧是忽略,但此时若子进程退出将不会变成僵尸进程而是父进程直接回收

演示如下:

若直接采用默认的忽略处理方式:

如果自定义SIG_IGN:

signal(SIGCHLD, SIG_IGN);

简单不先于复杂,而是在复杂之后 —— Alan Perlis


如有错误,敬请斧正

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

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

相关文章

MRP的库存供应天数(StckDS)和收货供应天数(RDS)

我们在MD07里面&#xff0c;可以看到三个天数&#xff1a; 1、库存可供应天数(StckDS) 2、第一次日供应量收货(RDS 1) 3、第二接货日期的收货(RDS 2) 而且信号灯的显示就是按照这三个天数来进行设置的 我们以15000047这个物料为例&#xff0c;来看下这三个数是怎么计算的 …

Java集合全解【完整版】

文章目录01 初识集合> 集合是什么&#xff1f;为什么要用集合&#xff1f;> 集合的框架体系02 Collection接口> Collection接口常用方法> Collection接口遍历元素&#xff1a;使用Iterator&#xff08;迭代器&#xff09;> Collection接口遍历元素&#xff1a;增…

那个叫郭不戳的博主去哪了--回归篇

文章目录那个叫郭不戳的博主去哪了--回归篇所以你究竟去哪了&#xff1f;有没有好的面试经验啊工作方面怎么样啊卷不卷总结那个叫郭不戳的博主去哪了–回归篇 消失了三个月&#xff0c;今天开始正式回归。一大早打开CSDN看到好多消息&#xff0c;首先谢谢大家对我的认可。接下来…

基于微信小程序云开发的医院体检预约小程序源码,医院体检预约小程序源码,实现体检预约管理、体检预约凭证、预约数据查看导出 版权申诉

功能介绍 对于医院体检科室和体检机构而言&#xff0c;每天的体检人数分布也不太均衡&#xff0c;若很多人集中在 某些天体检&#xff0c;会出现「医生强度大、体检人排队久」的问题。采用体检预约小程序进行体检预约数管理&#xff0c;体检人可预约到更广的日期范围、更精准的…

Apache Spark 机器学习 管道 3

Apache Spark的机器学习管道提供一个统一的、高级的APIs集合&#xff0c;该APIs集合是以数据框架&#xff08;Datagrams&#xff09;为基础&#xff0c;帮助开发人员创建或者优化一个用于实际环境的机器学习的管道。 管道&#xff08;Pipeline&#xff09;的基本概念 Spark机…

测试之Bug与用例【创建Bug、Bug级别、Bug生命周期、测试用例的万能公式、设计测试用例具体方法】

文章目录1. 如何创建Bug2. Bug的级别3. Bug的生命周期4. 面试题&#xff1a;跟开发产生争执怎么办5. 设计测试用例的万能公式使用万能公式对水杯设计测试用例6. 设计测试用例的具体方法6.1 等价类6.2 边界类6.3 判定表6.4 正交法(allparis)6.5 场景设计法1. 如何创建Bug 提 Bu…

关于USB的事儿

FTDI公司的产品值得研究&#xff0c;包含很多USB转接芯片【串口、SPI、IIC、JTAG】。USB通信芯片本身也是需要编程的&#xff0c;上位机和USB芯片通信是需要驱动的&#xff0c;才能实现对应的识别。上位机(VB、C#、C等一系列面向对象程序)调用dll文件&#xff0c;里面很多API函…

集群安全Security

一、多节点 1、配置文件中配置 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.client_authentication: required xpack.security.transport.ssl.ke…

Java中最常用的循环--for循环

文章目录0 写在前面1 格式2 举例说明三种循环之间的区别写在最后0 写在前面 Java for循环用于多次迭代程序的一部分&#xff0c;或者多次执行同一个代码块。如果迭代次数是固定的&#xff0c;建议使用for循环。 说实在的&#xff0c;for循环就是while循环的变种。只不过限定条…

初识网络原理

网络的迅速发展普及了计算的使用&#xff0c;网路由一开始的独立模式&#xff08;计算机之间相互独立&#xff09;到局域网&#xff08;局域网内的主机之间能方便的进行网络通信&#xff09;再到现在的广域网&#xff08;通过路由器将多个局域网连接起来&#xff0c;在物理上组…

Java多线程进阶

目录1.常见锁策略1.1 乐观锁和悲观锁1.2 读写锁和普通互斥锁1.3 重量级锁和轻量级锁1.4 挂起等待锁和自旋锁1.5 公平锁和非公平锁1.6 重入锁和非重入锁1.7 synchronized锁的特点2.CAS2.1 CAS实现原子类2.2 实现自旋锁2.3 CAS的ABA问题2.4 解决ABA问题3.synchronized的锁优化机制…

“华为杯”研究生数学建模竞赛2004年-【华为杯】B题:有交货时间限制的大规模实用下料问题(附优秀论文)

赛题描述 “下料问题(cutting stock problem)”是把相同形状的一些原材料分割加工成若干个不同规格大小的零件的问题,此类问题在工程技术和工业生产中有着重要和广泛的应用. 这里的“实用下料问题”则是在某企业的实际条件限制下的单一材料的下料问题。 一个好的下料方案首先…

axios踩坑,不同版本默认Content-Type不同

文章目录1、请求封装2、问题axios 0.21源码axios 1.2源码总结1、请求封装 封装代码&#xff1a; /**axios封装* 请求拦截、相应拦截、错误统一处理*/ import axios from axios import QS from qs; import { Message } from element-ui// 环境的切换 if (process.env.NODE_ENV…

大数据必学Java基础(一百二十):Maven工程的介绍与创建

文章目录 Maven工程的介绍与创建 一、Maven工程类型 1、POM工程 2、JAR工程 3、WAR工程

Cookie、Session、Token、JWT详解

Cookie、Session、Token、JWT 什么是认证&#xff08;Authentication&#xff09; 通俗地讲就是验证当前用户的身份&#xff0c;证明“你是你自己”&#xff08;比如&#xff1a;你每天上下班打卡&#xff0c;都需要通过指纹打卡&#xff0c;当你的指纹和系统里录入的指纹相匹…

盖子的c++小课堂——第九讲:文件输入输出

前言 作者&#xff1a;哈咯大家好&#xff0c;我是盖…… 粉丝&#xff1a;更新更新&#xff01;再不更新我来偷你家马桶盖&#xff01;快更快更~~ 作者&#xff1a;子的盖…… 粉丝&#xff1a;再不更我真来偷你家马桶盖了昂~~ 作者&#xff1a;……啊&#xff01;&#…

实用!ArcGIS更改字段名称、类型、顺序的技巧

01需求说明 常规来说。ArcGIS属性表中的字段一旦建立&#xff0c;他的顺序、字段名称、字段的类型是没有办法更改的。 我们在属性表中拖动字段&#xff0c;也只是改变了字段的临时显示顺序。一旦数据重新加载就会显示会原来的顺序。 那么有什么技巧来解决这样的问题&#xff0c…

python爬虫的简单复习1【使用etree进行XPath解析】

一、相关知识1.1 etree的使用1.1.1 编码流程将HTML文本加载到etree对象中调用etree的xpath()函数完成标签定位对标签为所欲为&#xff08;此时获得的标签其实是xpath()函数返回的对象&#xff09;1.1.2 环境安装pip install lxml1.1.3 实例化etree对象# 首先导入模块 from lxml…

优思学院|如何更有效地进行5why分析(五问法)?

所谓5-why&#xff08;五个为什么或五问法&#xff09;&#xff0c;意思是要问五次 "为什么"&#xff0c;直到你找到问题的根本原因。具体的过程是&#xff1a;首先确定问题&#xff0c;然后回答"为什么"&#xff0c;并记录答案。第二次回答"为什么&q…

虚拟串口及其在串口转以太网中的应用

本文介绍虚拟串口的概念&#xff0c;以及如何在串口转以太网中利用该技术。 1.虚拟串口的概念 虚拟串口是用操作系统的虚拟驱动技术产生的串口&#xff08;COM口&#xff09;&#xff0c;相对于计算机本身的硬件串口&#xff08;COM1等&#xff09;来说虚拟串口并不对应一个物…