[Linux][进程信号][一][信号基础][如何产生信号]详细解读

目录

  • 0.前言预备
    • 1.系统定义的信号列表
    • 2.核心转储 -- Core Dump
  • 1.信号基础
    • 1.信号概念
    • 2.信号处理方式概览
    • 3.理解信号如何被保存
    • 4.信号发送的本质
  • 2.如何产生信号?
    • 1.终端按键产生信号
    • 2.系统调用接口
      • 1.kill()
      • 2.raise()
      • 3.abort()
      • 4.如何理解?
    • 3.由软件条件产生信号
    • 4.硬件异常产生信号
    • 5.总结


0.前言预备

1.系统定义的信号列表

  • **[1, 31]:**普通信号

  • **[34, 64]:**实时信号
    请添加图片描述

  • 这些信号在什么条件下产生,默认的处理动作是什么,可以通过 man 7 signal 查看
    请添加图片描述

2.核心转储 – Core Dump

  • 当一个进程要异常终止时,可以选择把当前进程在内存中的相关核心数据转存到磁盘上,文件名通常是core,这叫做Core Dump
  • 进程异常终止通常是因为有Bug,事后可以用调试器检查core文件以查清错误原因,这叫做Post-mortem Debug(事后调试)
    • 使用:core -file core.pid
  • 默认是不允许产生core文件的,因为core文件中可能包含用户密码等敏感信息,不安全
    • 一个进程允许产生多大的core文件取决于进程的Resource Limit(这个信息保存在PCB中)
    • 在开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件
      • ulimit -a
      • ulimit -c
      • 当前bash会话有效
        请添加图片描述

1.信号基础

1.信号概念

  • 信号是进程之间事件异步通知的一种方式,属于软中断
    • 本质是一种通知机制
  • 理解信号思路
    • 进程要处理信号,必须具备信号"识别"能力(看到 + 处理动作)
    • 进程为什么能够"识别"信号?
      • 程序员通过代码提前设置好的
    • 信号产生是随机的,进程可能正在忙自己的事情
      • 信号可能后续被处理,不一定是立即处理
    • 信号会临时的记录下对应的信号,方便后续进行处理
      • 何时处理?
        • 合适的时候
    • 一般而言,信号的产生相对于进程而言是异步的

2.信号处理方式概览

  • 执行该信号的默认处理动作
  • 忽略此信号
  • 自定义动作(捕捉信号)
    • 提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数
  • 信号捕捉初识
    • **功能:**捕获特定的信号,执行自定的方法
    • 原型:sighandler_t signal(int signum, sighandler_t handler);
    • 参数:
      • **signum:**要捕获的信号
      • **handler:**函数指针,要执行的自定方法
    • 返回值:
      • 不在乎
    • 注意:
      • signal函数,仅仅是修改进程对特性信号的后续处理动作,不是直接调用对应的处理动作
      • 如果后续没有任何SIGNAL信号产生,handler永远不会被调用

3.理解信号如何被保存

  • 需要解决两个问题 --> 什么信号?是否产生?
  • 进程PCB内部保存了**信号位图**字段
    • 第几个比特位表示什么信号
    • 01表示是否产生信号

4.信号发送的本质

  • 信号位图在task_struct --> task_struct内核数据结构 --> OS掌控
  • 信号发送的本质:OS向目标进程写信号,OS直接修改PCB中的指定的位图结构,完成"发送"信号的过程

2.如何产生信号?

1.终端按键产生信号

  • 键盘的工作方式是通过中断方式进行的
    • 便可以**识别组合键,**如Ctrl + c
  • OS解释组合键 --> 查找进程列表 --> 找到前台运行的进程 --> OS写入对应的信号到进程内部的位图结构中

2.系统调用接口

1.kill()

  • **功能:**给指定的进程发送指定的信号
  • 原型:int kill(pid_t pid, int sig);

2.raise()

  • **功能:**给当前进程发送指定的信号 --> 自己给自己发信号
  • 原型:int raise(int sig);

3.abort()

  • **功能:通常用来终止进程,发送SIGABRT(6)**信号
  • 原型:void abort(void);

4.如何理解?

  • 用户调用系统接口 --> 执行OS对应的系统调用代码 --> OS提取参数,或者设置特定的数值 --> OS****向目标进程写信号 --> 修改对应进程的信号标记位 --> 进程后续会处理信号 --> 执行对应的处理动作

3.由软件条件产生信号

  • 如:管道读端不光不读,而且还关闭了,写端一直在写,会发生什么问题?
    • 写没有意义,OS会自动终止对应的写端进程,通过发送信号(SIGPIPE)的方式
  • 如:alarm() && SIGALRM
    • 功能:
      • 设定一个闹钟,告诉内核在seconds秒之后给当前进程发SIGALRM信号,该信号的默认处理动作是终止当前进程
      • 闹钟一旦触发,就自动移除了
  • 原型:unsigned int alarm(unsigned int seconds);
  • 返回值:
    • 0
    • 以前设定的闹钟时间还余下的秒数
  • 如何理解?
    • OS先识别到某种软件条件触发或不满足某条件 --> OS构建信号,发送给指定的进程

4.硬件异常产生信号

  • 硬件异常被硬件以某种方式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号
    • 例如:当前进程执行了除以0的指令,CPU的运算单元会产生异常,内核将这个异常解释为SIGFPE信号发送给进程
    • 例如:当前进程访问了非法内存地址,,MMU会产生异常,内核将这个异常解释为SIGSEGV信号发送给进程
  • 由此看出,在C/C++中,除零,内存越界等异常,在系统层面上,是被当成信号处理的

5.总结

  • 所有的信号,有他的来源,但最终全部都是被OS识别,解释,并发送的

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

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

相关文章

C# 图像旋转一定角度后,对应坐标怎么计算?

原理分析 要计算图像内坐标在旋转一定角度后的新坐标,可以使用二维空间中的点旋转公式。假设图像的中心点(即旋转中心)为 (Cx, Cy),通常对于正方形图像而言,中心点坐标为 (Width / 2, Height / 2)。给定原坐标点 (X, …

开发与产品的战争之自动播放视频

开发与产品的战争之自动播放视频 起因 产品提了个需求,对于网站上的宣传视频,进入页面就自动播放。但是基于我对chromium内核的一些浅薄了解,我当时就给拒绝了: “浏览器不允许”。(后续我们浏览器默认都是chromium内核的&#…

【深度学习】Vision Transformer

一、Vision Transformer Vision Transformer (ViT)将Transformer应用在了CV领域。在学习它之前,需要了解ResNet、LayerNorm、Multi-Head Self-Attention。 ViT的结构图如下: 如图所示,ViT主要包括Embedding、Encoder、Head三大部分。Class …

OpenHarmony鸿蒙南向开发案例:【智能燃气检测设备】

样例简介 本文档介绍了安全厨房案例中的相关智能燃气检测设备,本安全厨房案例利用轻量级软总线能力,将两块欧智通V200Z-R/BES2600开发板模拟的智能燃气检测设备和燃气告警设备组合成。当燃气数值告警时,无需其它操作,直接通知软总…

VOS3000加装登陆服务器安全防护系统有用吗

VOS3000是一款专业的软交换系统,它主要用于中小规模的VoIP运营业务,包括运营费率设定、套餐管理,账户管理、业终端管理、网关管理、数据查询、卡类管理、号码管理、系统管理等功能1。而关于加装登陆服务器安全防护系统是否有用,这…

2.4 Web容器配置:Tomcat

2.4 Web容器配置 2.4.1Tomcat配置1.常规配置2. HTTPS配置 *********** 2.4.1Tomcat配置 1.常规配置 在SpringBoot项目中,可以内置Tomcat、Jetly、Undertow、Netty等容器。 当开发者添加了spring-boot-starter-web依赖之后,默认会使用Tomcat作为Web容器…

基于Springboot+Vue的Java项目-网上点餐系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

【EdgeBox-8120AI-TX2】Ubuntu18.04 + ROS_ Melodic + 星秒PAVO2单线激光 雷达评测

大家好,我是虎哥,好久不见,最近这断时间出现了一点变故,开始自己创业,很多事需要忙,所以停更了大约大半年,最近一切已经理顺,所以我还是抽空继续我之前的FLAG,CSDN突破十…

牛客NC314 体育课测验(一)【中等 图,BFS,拓扑排序 Java,Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/1a16c1b2d2674e1fb62ce8439e867f33 核心 图,BFS,拓扑排序,队列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修…

数据库——实验9 存储过程的使用

1. 存储过程的定义 存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL 代码集,它与特定的数据库相关联,存储在SQL Server服务器上。用户可以像使用自定义的函数一样重复调用这些存储过程,实现它所定义的操作。 2. 存储过程的类型…

后台管理系统加水印(react)

效果 代码图片 代码 window.waterMark function (config) {var defaultConfig {content: 我是水印,fontSize: 16px,opacity: 0.3,rotate: -15,color: #ADADAD,modalId: J_waterMarkModalByXHMAndDHL,};config Object.assign({}, defaultConfig, config);var existMarkModal…

镜舟科技荣获金科创新社 2024 年度金融数据智能解决方案奖

近日, 镜舟科技凭借领先的金融实时数仓构建智能经营解决方案,在“金科创新社第六届金融数据智能优秀解决方案评选”活动中,成功入选“数据治理与数据平台创新优秀解决方案”榜单。 金科创新社主办的“鑫智奖”评选活动,旨在展示…

【解决】Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed

问题原因: 在Java8及高版本以上的版本在源应用程序不信任目标应用程序的证书,因为在源应用程序的JVM信任库中找不到该证书或证书链。也就是目标站点启用了HTTPS 而缺少安全证书时出现的异常 解决方案: 我使用的是忽略证书验证 public clas…

【配电网故障定位】基于二进制矮猫鼬优化算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#82】

文章目录 【获取资源请见文章第6节:资源获取】1. 配电网故障定位2. 二进制矮猫鼬优化算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节:资源获取】 1. 配电网故障定位 配电系统故障定位,即在配电网络发生…

vscode微博发布案例

样例: CSS代码: * {margin: 0;padding: 0; }ul{list-style: none; }.w {width: 900px;margin: 0 auto; }.controls textarea {width: 878px;height: 100px;resize: none;border-radius: 10px;outline: none;padding-left: 20px;padding-top: 10px;font-size: 18px; }.controls…

UE4 相机围绕某点旋转

关卡(一个相机CameraActor,一个Cube(名叫Target)): 关卡蓝图里的逻辑(为了大家看得清楚,特意连得很紧凑,也比较乱,不然一张截图放不下): 只对Yaw 只Pitch: 同样对Roll: 围绕任…

汇编语言——将BX中的无符号数和有符号数以二进制、八进制、十六进制、十进制形式输出

文章目录 将BX中的无符号数以二进制形式输出将BX中的无符号数以八进制形式输出将BX中的无符号数以十六进制形式输出将BX中的无符号数以十进制形式输出将BX中的有符号数以十进制形式输出 将BX中的无符号数以二进制形式输出 利用移位指令会影响CF,默认dl30h(数字0)&a…

基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

软航H5 PDF签章产品经nginx代理之后浏览器中PDF盖章时提示:签章失败:网络错误 的问题排查及解决办法

目录 问题现象 问题排查思路 问题处理办法 附:软航H5 PDF签章产品介绍 软航电子签章系统 软航版式文档签批系统 问题现象 问题描述:在系统中集成了软航H5 PDF签章产品,软航H5 PDF签章产品的对应服务是通过nginx代理的,在奇安…

leetcode199 二叉树的右视图

题目 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 解析 这道题首先能想到的办法,就是使用迭代法层次遍历&…