当前位置: 首页 > news >正文

20.Linux进程信号(一)

信号: 产生->保存->处理

一、预备知识

信号vs信号量->没有任何关系

什么叫做信号?

中断我们正在做的事情,是一种事件的异步通知机制。

同步和异步理解:

同步指事件发生具有一定的顺序性(如命名管道中服务端读方式打开会阻塞,直到客户端的写入打开),异步指事情发生没有顺序性(如共享内存的读取和写入没有顺序性)。

信号的产生相对于进程的运行是异步的。

信号是发送给进程的。

基本结论:

1.信号处理,进程在信号没有产生的时候,早就知道信号该如何处理了

2.信号的处理,不是立即处理,而是可以等一会在处理,合适的时候,进行信号的处理。

3.人能识别信号,是被“提前教育”过的,进程也是如此,OS程序员设计的进程,进程早已内置对于信号的识别和处理方式。

4.信号源非常多->给进程产生信号的,信号源,也非常多。

SIGINT:键盘产生信号。

收到信号,处理信号(进程收到信号,合适的时候处理信号):

1.默认处理动作

2.自定义信号处理动作

3.忽略处理

自定义捕捉系统调用:

sighandler_t 实质上等同于void(*)(int)

sighandler_t signal(int signum, sighandler_t handler);

参数:

signum:信号编号

handler: 自定义的信号处理方式,当收到对应的信号,就回调执行handler方法。

返回值:成功返回handler,失败返回SIG_ERR(一个宏,通常定义为 (void (*)(int))-1,表示一个无效的函数指针),错误码被设置。

二、信号的产生

1.键盘产生信号

ctrl+C向前台进程发送2号信号。

相当一部分信号的处理动作就是让自己终止。

前台进程和后台进程:

./xxx 前台进程 ->键盘产生的信号,只能发送给前台进程。

./xxx & 后台进程

前台进程只能有一个,本质上前台进程就是要从标准输入获取数据的。

后台进程可以有多个。

前后台移动命令:

jobs-l 查看当前终端会话中通过 & 或 Ctrl+Z 挂起的后台任务
fg 任务号  特定的进程,提到前台
ctrl+z 进程切换到后台,并且暂停

bg 任务号  让指定的后台进程进行回复运行

什么叫做给进程发送信号?
信号产生之后,不是立即处理的,所以要求进程把信号记录下来。

发送信号本质:向目标进程写信号,修改位图!

信号记录在task_struct中,是一个位图结构->属于操作系统的数据结构对象->修改位图本质就是修改内核的数据->不管信号怎么产生,发送信号,在底层,必须让OS发送。

特别注意:不是所有信号都能被自定义捕捉。

2.系统调用产生信号

int kill(pid_t pid, int sig);    //给目标进程发送信号

raise给自己发送信号,abort给自己进程发送终止信号(发送6号新号,要求进程必须处理,默认终止)。

3.系统指令kill产生信号

4.产生信号的方式(硬件异常)

常见的硬件异常:

除0,野指针。

信号全部都是操作系统发送的!

操作系统怎么知道犯错了?->操作系统是软硬件资源的管理者->CPU,寄存器,状态寄存器(标志寄存器:EFLAGS)可以判断溢出

野指针异常->cpu里的MMU将虚拟地址转化成物理地址失败了->硬件报错

5.产生信号的方式---软件条件

进程--管道--进程,在匿名管道,如果读端关闭,写端继续,操作系统就会发送SIGPIPE信号来终止写端进程,OS不做没有意义的事情。

调用alarm函数可以设定⼀个闹钟,也就是告诉内核在 seconds 秒之后给当前进程发SIGALRM 信号,该信号的默认处理动作是终止当前进程。
这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。
例如:alarm(5)->过5秒终止,返回值是0
alarm(5)->过3秒,设alarm(10)->过10秒终止了,返回值为2,即以前设定闹钟剩余的秒数
pause函数作用:暂停,等待信号到来,直到信号处理动作结束,pause函数才会返回。
操作系统本质:死循环pause,等待信号到来,每隔一段时间,CPU向操作系统发送硬件中断。
如何理解闹钟:
时间片本质就是一个计数器。
闹钟理解:闹钟的结构里存有过期时间,组织方式可以理解成最小堆,将当前操作系统记录的时间戳与闹钟堆顶的时间戳进行比较,如果堆顶的时间戳大于等于操作系统当前记录的,就向对应的进程发送SIGALRM信号,同时把堆顶删除。

文章转载自:

http://F4rfH2xi.qxbsq.cn
http://qStZ948U.qxbsq.cn
http://G05VQQMv.qxbsq.cn
http://A3SjpRAK.qxbsq.cn
http://XlLGzygZ.qxbsq.cn
http://Q7KVsZPz.qxbsq.cn
http://Sq47LayM.qxbsq.cn
http://kZDUb758.qxbsq.cn
http://exG3wzqz.qxbsq.cn
http://JJSjzIiU.qxbsq.cn
http://cPMqgrdv.qxbsq.cn
http://AE5PU0YW.qxbsq.cn
http://KNYqVpqc.qxbsq.cn
http://3xyFyial.qxbsq.cn
http://gxTvrVbV.qxbsq.cn
http://bc7aDlkl.qxbsq.cn
http://A9GJwi8h.qxbsq.cn
http://aTTGqGy5.qxbsq.cn
http://jhwApQW2.qxbsq.cn
http://KtE4lwW3.qxbsq.cn
http://UOwb1laJ.qxbsq.cn
http://Eyuv1N1w.qxbsq.cn
http://XoPpbLSj.qxbsq.cn
http://J7AvTQhH.qxbsq.cn
http://JO3Y9Wh2.qxbsq.cn
http://C3UWRgEG.qxbsq.cn
http://EUA4Mc6x.qxbsq.cn
http://WL51mdWn.qxbsq.cn
http://XG25qt2k.qxbsq.cn
http://QkEtY6tl.qxbsq.cn
http://www.dtcms.com/a/363245.html

相关文章:

  • C++拷贝语义和移动语义,左值引用与右值引用
  • 汉得H-AI飞码智能编码助手V1.2.4正式发布!
  • Turso数据库:用Rust重构的下一代SQLite——轻量级嵌入式数据库的未来选择
  • 三维重建——基础理论(四):三维重建基础与极几何原理(三维重建基础、单视图回忆、双目视觉、极几何、本质矩阵与基础矩阵、基础矩阵估计)
  • 虚实交互新突破:Three.js融合AR技术的孪生数据操控方法
  • 什么是 AWS 和 GCE ?
  • 解决Mac电脑连接蓝牙鼠标的延迟问题
  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:BC140 杨辉三角、BC133 回型矩阵、BC134 蛇形矩阵题目的解析
  • A-Level课程选择与机构报名指南
  • 净利润超10亿元,智能类产品18倍增长!顾家家居2025年半年报业绩:零售增长强劲,整家定制多维突破,全球深化布局!|商派
  • Selenium核心技巧:元素定位与等待策略
  • 苹果内部 AI聊天机器人“Asa”曝光,为零售员工打造专属A
  • 【国内外云计算平台对比:AWS/阿里云/Azure】
  • react用useImages读取图片,方便backgroundImage
  • 硬件开发_基于物联网的自动售卖机系统
  • Spring Boot数据校验validation实战:写少一半代码,还更优雅!
  • arm架构本地部署iotdb集群
  • 物联网开发学习总结(1)—— IOT 设备 OTA 升级方案
  • 没有天硕工业级SSD固态硬盘,物联网痛点如何解决?
  • Sping Web MVC入门
  • Spring MVC BOOT 中体现的设计模式
  • Web基础学习笔记01
  • 我的项目我做主:Focalboard+cpolar让团队协作摆脱平台依赖
  • 【Vue2 ✨】 Vue2 入门之旅(五):组件化开发
  • 2024年全国研究生数学建模竞赛华为杯D题大数据驱动的地理综合问题求解全过程文档及程序
  • 【硬核干货】把 DolphinScheduler 搬进 K8s:奇虎 360 商业化 900 天踩坑全记录
  • 复杂PDF文档如何高精度解析
  • 【Flask + Vue3 前后端分离管理系统】
  • GitHub 热榜项目 - 日榜(2025-09-02)
  • 详解 C++ 中的虚析构函数