Linux操作系统--信号

Linux操作系统-信号 产生信号的方式,信号在OS内核中的存储方式:block信号集,pending信号集,handler方法处理表。相关接口:sigpending,sigprocmask,signal,sigaction。信号处理的流程。捕捉信号的流程。用户态与内核态。可重入与不可重入函数。volatile。SIGCHLD 阅读详情

目录

1.信号产生

概念:

core vs Term

信号产生的5种条件

从软硬件理解信号的保存

软件,如何理解信号处理?

硬件中断

 2、信号捕捉

3、信号阻塞

信号其他相关常见概念


1.信号产生

概念:

什么是信号?信号一种用户、OS、其他进程,向目标进程发送导步事件的一种方式!

概念问题:

  1. 你怎么能识别信号呢?识别信号,是内置的。进程认识信号,是程序员内置的特性,也就是说默认的信好捕捉是提前写好的
  2. 信号产生之后,怎么处理你知道吗?知道。如果没有产生,你知道信号怎么处理吗?知道!信号的处理方法,在信号产生之前,已经准备好了。
  3. 处理信号?立即处理吗?我在做我的事情,优先级很高,信号处理,可能并不是立即处理。合适的时候??                                                                                                                     3.1 到来 <- 没有处理,进程记录下来对应的信号!,等到空闲 -> 处理
  4. 怎么处理信号呀?a. 默认行为 b. 忽略信号 c. 自定义动作

信号查询:在命令行中输入 

man 7 signal

就可以得到1-31个标准信号

core vs Term


正常的退出,不需要进行debug
核心转储
在当前目录下形成文件,pid.core
进程崩溃的时候,将进程在内存中的部分信息保存起来,方便后续调试!
云服务器一般是关闭core功能的!

ctrl + c  2号信号

ctrl + \  3号信号 默认是终止的

信号的默认处理方式是内置的,要修改也是可以的

捕捉信号的函数 : signal 信号捕捉和自定义 

void (*signal(int sig, void (*func)(int)))(int);

第二个参数  SIG_IGN忽略信号   ignore:忽略:本身就是一种信号捕捉的方法,动作是忽略

                    SIG_DFL  default:默认。

这俩本质上是宏

也可以传函数  void (*func)(int)))(int)是个函数指针

第一个参数是第几个信号

例如:

signal(SIGINT, SIG_DFL);

signal 只需要使用异常  如果没有产生信号的话,自己写的方法不会被调用

信号产生的5种条件

1.键盘

2.指今

3.系统调用

4.软件条件

5.异常

从软硬件理解信号的保存

软件,如何理解信号处理?

键盘产生 -> OS发送 ->进程  如何记录下来信号?

1-31个信号,熟不熟悉?

对的,位图

操作系统的PCB存在这样的结构:task struct -> uint32 t signalbits

0000 0000 0000 0000 0000 0000 0000 0000

比特位的位置:信号的编号

比特位的内容:是否为0/1,是否收到对应的信号

发送信号的本质是什么?写入信号!

OS修改目标进程的PCB中的信号位图,0->1

无论以什么方式发送信号,最终,都是转换到OS,让OS写入信号的。

因为task struct的唯一管理者是OS!!

系统调用发送信号  kill   raise(给自己发信号)  abort(给自己发6号信号)

键盘输入都是先发送硬件中断到cup,所以以后操作系统就不需要轮询等键盘了,而是cpu告诉OS什么时候有外设准备好了,内容由操作系统读取。

硬件,操作系统怎么知道键盘上的数据了?

硬件中断

 2、信号捕捉

用户态与内核态

 pending表和block表的检测在3~4之间,这样就可以在处理,自定义信号的时候再次接受新来的信号,也只能同时接受俩信号

3、信号阻塞

信号其他相关常见概念
 


- 实际执行信号的处理动作称为信号递送(Delivery)。
- 信号从产生到递送之间的状态,称为信号未决(Pending)。
- 进程可以选择阻塞(Block)某个信号。
- 阻塞特定信号,信号产生了,一定把信号要进行pending(保存),永远不递送,除非我们解除阻塞。
- 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递送的动作。
- 注意,阻塞和忽略是不同的,只要信号被阻塞就不会递送,而忽略是在递送之后可选的一种处理动作。
 

操作系统的PBC有3个表,我们可以用以下函数操控blocks表

Android应用隐私合规自动化检测:Frida与Camille实战指南 在移动应用安全与隐私合规领域,动态代码插桩技术已成为核心检测手段。其原理是通过运行时注入,实时监控和修改应用行为,从而绕过传统静态分析的局限。这项技术的核心价值在于能够精准捕获应用在运行时的敏感数据调用与网络传输行为,为隐私合规审计、安全测试提供直接证据。在实际应用场景中,它尤其适用于自动化检测违规收集个人信息、追踪数据流向等任务。本文聚焦于利用Frida这一动态插桩框架,结合Camille隐私合规检测工具集,构建自动化监控环境。通过注入JavaScript代码,实现对Android敏感API(如获取设备标 阅读详情

相关推荐

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走 同步的比较简单,直接在coze 工作流里面就可以搞定了,也不用写代码之类的

AI懒虫 2358

【Linux操作系统】:信号

首先我们可以简单理解一下信号的概念,信号,顾名思义,就是我们操作系统发送给进程的消息。举个简单的例子,我们在写C/C++程序的时候,当执行a / 0类似的操作的时候,程序直接就挂了,这是什么原因呢?其实本质就是CPU在计算的时候出现异常,触发硬件中断,然后我们操作系统发送了对应的信号给进程,然后我们进程默认就退出了。这一系列东西,我都将在后续的文章中具体的提到。

jerryhe_com的博客 1337

CentOS 7 常用命令大全

CentOS中Linux命令

m0_63075763的博客 2019

Linux操作系统——进程信号

生活当中哪些场景算信号呢?比如说你晚上调了个闹钟,然后第二天早上你听到了闹钟响了你就知道该起床了,这种机制就叫做。在生活中我们的信号是非常非常多的,比如说有:红绿灯,下课铃声,狼烟, 防控警报,电话铃声。那我们就以红绿灯为例,你为什么会认识红绿灯呢?因为在我们的小时候有人告诉过我们红绿灯的特征,红灯停,绿灯行这种理解。如何认识红绿灯呢?1.识别红绿灯 2.知道对应的灯亮了,,而。

希望自己从编程小白变成大佬 993

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4036

OSPF规划两大模型:双塔奇兵、犬牙交错

大家好,今天给大家带来的是OSPF规划两大模型:双塔奇兵、犬牙交错,让我们直接开始吧! OSPF规划之双塔奇兵 说明: OSPF 如果某个区域存在两个 ABR,并且在两个 ABR 上都对 area n 内的路由做了聚合操作。 最佳配置: 两台ABR之间的红线应该使用以太网的子接口技术,一个子接口属于area0,另一个属于 area n;或者该链路规划为 area n,同时配置虚连接; ABR 的 loopback0 规划入 area 0 OSPF 规划之犬牙交错 说明: 有时接入层的设备会以乱序的

网络技术联盟站 2423

Linux:进程信号的产生以及操作系统理解

信号的产生

海绵宝宝de派小星的博客 5997

[QMT和ptrade量化交易小白入门]-122、基于聚类分析的动态股票池构建与ETF轮动策略,回测年化 132.09%

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1029

Linux操作系统之信号:信号的产生

本文详细介绍了Linux系统中信号产生的五种方式:1. 键盘硬件中断(如Ctrl+C发送SIGINT信号);2. 通过kill等指令发送信号;3. 使用系统调用(kill/raise/abort);4. 软件条件触发(如管道关闭发送SIGPIPE,alarm定时发送SIGALRM);5. 异常情况(除零错误、野指针访问等)。文章还解释了信号处理机制,包括信号位图存储、默认处理方式,以及Core和Term终止方式的区别。通过代码示例演示了自定义信号处理方法,并揭示了操作系统通过中断机制管理信号的原理。

htw250056的博客 1898

别再盯着那 100 条数据了,RAP OData 分页机制到底在保护什么

摘要: SAP BTP ABAP Environment 的 OData 服务默认采用分页保护机制,未指定 $top 时仅返回100条数据并附带下一页链接。这种设计旨在防止资源滥用,而非服务故障。客户端应遵循OData协议规范,直接使用服务端返回的 next link 进行分页请求,而非自行构造URL。当指定 $top 参数时,若数值超过5000仍会被强制分页。该机制在SAPUI5控件中被自动处理,但自定义客户端需主动实现分页逻辑。对于自定义实体(Custom Entity),开发者需在Query Prov

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 863

使用virtuoso gds转lef操作方法

2) 然后,需要创建Pin,这里Pin的概念不同于label/text,是有实际金属的,二者的区别类似于pr中的port和terminal。1) 首先,需要画prBoundary,这个用drawing层的prBoundary画是不行的,不过建议pr阶段就把prBoundary转到gds里,在virtuoso layout中画prBoundary就比较容易。另外,用Create - Create Pin也可以创建pin,更适用于PG pin,操作时先给pg shape打label,最好放正中间。

m0_61544122的博客 1380

linux操作系统-信号

在Linux操作系统中,信号(Signal)是一种重要的进程间通信机制,它允许一个进程向另一个进程发送异步通知。这些通知可以是简单的消息,如用户按下了中断键(如Ctrl+C),也可以是复杂的系统事件,如除零错误或定时器到期。信号的产生和处理是Linux系统编程中的一个关键方面,对于理解和优化系统行为至关重要。信号的基本特性:1.异步性:信号是异步事件,可以在任何时候、由任何进程(包括内核进程和用户进程)发送给另一个进程。2.通知性:信号的主要目的是通知接收进程某个事件的发生,而不是传递数据。

m0_67794241的博客 1254

基于C#的工业机器人上位机控制程序开发(搭配松下PLC+MC协议)

基于C#的工业机器人上位机控制程序开发,核心是上位机与松下PLC的MC协议通信和机器人控制的安全逻辑,而不是单纯的界面编写。在工控现场,程序的稳定性和安全性永远是第一位的——比如解耦通信逻辑、处理跨线程问题、添加安全互锁、记录操作日志,这些都是保证产线稳定运行的关键。新手在学习时,建议先跟着步骤搭建好环境,跑通基础的PLC通信和机器人控制功能,再逐步尝试进阶优化。数据模型化、通信封装化、逻辑模块化、UI解耦化。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1241

linux 信号 pdf下载,Linux操作系统信号.pdf

Linux操作系统信号Linux 操作系统信号1. Linux 所有信号列表1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SI...

weixin_31500907的博客 124

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux操作系统之进程信号

一、信号1、概念2、系统定义的信号列表3、常见的信号处理方式二、产生信号的方式1、终端按键(1)组合键2、调用系统函数(1)kill命令(2)kill函数(3)raise函数(4)abort3、软件条件(1)alarm4、硬件异常三、阻塞信号1、概念2、信号在内核中的示意图四、信号集、sigset_t2、信号集操作函数3、sigprocmask函数,参数how的有效值4、sigpending5、示例代码五、信号捕捉1、捕捉信号2、signal函数3、sigaction函数4、可重入函数六、SIGCHLD信号

Snow_Dragon_L的博客 1491

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Linux操作系统之信号概念启程

在我们生活中无处不存在着信号:古代的狼烟烽火,现在马路上随处可见的红绿灯,甚至于你每天上早八定的闹钟,都是一种信号信号有一个特点,就是异步什么是异步性就是突发的,不可预料。我们用官方的点语言来说就是:信号可能在任何时刻到达,打断进程的正常执行流。你说闹钟和红绿灯我们可以预料,怎么会有异步性呢?那如果你的手机没电了!如果交通拥堵有交警专门去手动控制交通!这种情况的出现我们无法预料,所以,闹钟与红绿灯也是一种信号。敌人多久来?我们多久点燃烽火?

htw250056的博客 841

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Linux操作系统--阻塞信号、捕捉信号

文章摘要:本文详细介绍了Linux系统中信号处理的相关概念和机制。主要内容包括:1)信号递达与未决状态的区别,阻塞信号和忽略信号的不同;2)信号在内核中的表示方式,包括阻塞标志位、未决标志位和处理函数指针;3)信号集操作函数和信号屏蔽字的设置方法;4)信号捕捉的实现原理和sigaction函数的使用;5)可重入函数的概念及其重要性;6)volatile关键字在信号处理中的作用,防止编译器优化导致的数据不一致问题。文章通过具体示例和函数原型,全面阐述了信号处理机制的关键技术点。

2301_78702440的博客 1108

【linux学习指南】linux捕捉信号(一)信号捕捉的流程&&操作系统是怎么运⾏的

如果信号的处理动作是⽤⼾⾃定义函数,在信号递达时就调⽤这个函数,这称为捕捉信号。⽤⼾程序注册了SIGQUIT 信号的处理函数sighandler当前正在执⾏main 函数,这时发⽣中断或异常切换到内核态。在中断处理完毕后要返回⽤⼾态的main 函数之前检查到有信号SIGQUIT 递达。内核决定返回用户态后不是恢复main函数的上下文继续执行,而是执行sighandler函数, sighandler和main函数使用不同的堆栈空间,它们之间不存在调用和被调用的关系,是两个独立的控制流程。

a_sen的博客 991

Linux操作系统——信号通信

实验前置知识: 信号处理函数: (1)信号安装函数 signal()函数示例: #include"signal.h"/使用两个函数都必须包含这个头文件 #include"unistd.h" #include"stdio.h" //信号处理函数,调用时参数dunno会得到信号的值 void sigroutine(int dunno){ switch(dunno){ ...

DengShengL的博客 1076

进程信号(上)【Linux操作系统】

所以这个进程就算没有退出,CPU只要执行它的代码,就会发现状态寄存器有标志位为1,就会告诉操作系统,操作系统又会发信号杀它。操作系统作为硬件的管理者,当硬件出现问题时,就会向操作系统发送硬件中断,操作系统就自然会知道了。信号被触发(接收到信号)的时候,操作系统会把接收到的信号的编号,自动传给这个int类型的形参。进程可以阻塞(屏蔽)某个信号,屏蔽那个信号之后,即使进程接收到了这个信号,这个信号将。进程a执行2号信号的处理方法时,1,2,3,4信号都会被block表屏蔽。

2301_80058734的博客 1256

【Linux操作系统】:Linux进程信号

实际上当用户按 Ctrl+C 时,这个键盘输入会产生一个硬中断,被操作系统获取并解释成信号(Ctrl+C被解释成2号信号),然后操作系统将2号信号发送给目标前台进程,当前台进程收到2号信号后就会退出。 我们可以使用 signal 函数对2号信号进行捕捉,证明当我们按 Ctrl+C时进程确实是收到了2号信号。signal 函数 的详情如下:

元清的博客 823

Linux操作系统之信号:信号补充

本文深入探讨了用户态与内核态的概念及其转换机制。文章首先通过虚拟地址空间的划分(用户空间0-3GB和内核空间3-4GB)解释了进程如何共享操作系统内核,并引入CPL(当前特权级)概念说明权限控制原理。随后详细分析了sigaction函数的用法和信号处理机制,包括自动阻塞当前信号、pending表变化时机等特性。文章还区分了可重入与不可重入函数,并以SIGCHLD信号为例说明异步清理子进程的方法。最后指出通过设置SIG_IGN可避免僵尸进程产生,为后续线程学习做铺垫。全文通过代码示例和位图打印验证了理论分析,

htw250056的博客 955

Linux操作系统之信号:保存与处理信号

本文深入讲解了Linux系统中信号的保存与捕捉机制。主要内容包括:1)信号保存的PCB结构,详细解析了pending位图、block位图和handler函数指针数组的作用;2)信号集操作函数如sigprocmask、sigpending的使用方法;3)信号处理的完整流程,涉及4次内核态与用户态切换;4)操作系统运行原理,包括硬件中断、时钟中断和软中断的工作原理;5)系统调用的实现机制,说明其本质是通过中断向量表进行跳转。文章通过代码示例和图示,帮助读者理解信号从产生到处理的全过程,并揭示了操作系统作为&qu

htw250056的博客 1579

Linux 操作系统 --- 信号

信号是操作系统向进程发送的一种通知,表示某个特定事件已经发生。在Unix、类Unix以及其他系统中,信号被广泛使用。在这篇文章中介绍了信号的概念,也介绍了信号从哪里来,到哪里去,被接受处理的过程,希望大家有所收获😁。

BUG制造机的博客 1525

【Linux操作系统】信号的产生&&捕获

一篇文章教你理解Linux中的进程信号

Lin5200000的博客 1388

进程信号(下)【Linux操作系统】

①因为信号一般就是用来终止进程的,信号的默认处理方法不是退出就是暂停,同一个信号根本不需要执行多次一个信号的默认处理方法执行了,也没机会再执行其他的信号的处理方法了②如果不串行执行,而是嵌套执行,那么如果因为出现异常,一直再发送同一个信号/多个信号只要调用了信号处理方法pending表中这个信号就会1→0]并且这些信号都被自定义捕捉了那么就可能执行某个信号处理方法的过程中,因为一次时钟中断,进入内核态出来的时候,看见pending表有1,就一直递归执行信号处理方法,很容易导致栈溢出。

2301_80058734的博客 948
上一篇: Linux 操作系统中的管道与共享内存
下一篇: 分页式存储管理--虚拟地址和多级页表
microlovw
博客等级 码龄3年 283粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值