Linux信号:信号的概念及意义

news2024/11/18 2:42:04

目录

一、什么是信号

kill-l查看信号

二、信号的产生

2.1系统调用

kill

raise

abort

2.2软件条件

13)SIGPIPE pipe信号

14)SIGAKARM alarm信号

2.2硬件中断

2.3异常

8)SIGFPE 除0异常

11)SIGSEGV 野指针

2.4信号处理的常见方式

三、Core Dump和term

core

term


一、什么是信号

在日常生活中有很多和信号有关的例子,红绿灯不同的颜色代表不同的信号,汽车碰到人按喇叭代表提醒你有车的信号,跑步枪响代表跑步的信号,我们不知道信号合适会出现,但在信号出现时,我们都知道此信号代表着我们应该进行什么样的动作,而在linux操作系统中亦是如此,只不过此时发出信号的一方变成了OS或者是用户,接收信号量的一方变成了进程。
而在Linux中的信号则具有以下几种特征,也是进程看待信号的方式:
Linux系统提供的让用户(进程)给其他进程发送异步信息的一种方式
1、在没有发生的时候,我们已经知道发生的时候该怎么处理了。
2、信号我们能够认识,很早之前就已经被设置了识别特别待定信号的方式。
3、信号到来的时候,正在处理更重要的事情,暂时不能处理到来的信号,必须暂时要将到来的信号进行临时保存(保存在进程PCB中)。
4、信号到了,可以不立即处理,可以在合适的时候处理。
5、信号的产生是随时产生的,我们无法准确预料,所以信号是异步发送的。
信号的产生是由别人(用户/进程)产生的,收到之前,该进程一直在执行自己的代码,所以是并发在跑的。

kill-l查看信号

二、信号的产生

2.1系统调用

系统调用作为C/C++学习过程中是必不可少的一个内容,因为安全性和操作系统的规则,用户想要执行某些系统层面的操作时,必须通过系统调用来让操作系统执行,而之前提到的kill指令就是通过系统调用来实现的。

kill

 通过kill可以向任意的进程发送任意的信号。

raise

自己给运行自己的进程发送信号。

abort

终止自己,向自己发送6号信号。

2.2软件条件

13)SIGPIPE pipe信号

在博主之前的文章中曾详细介绍过pipe的使用,管道是一个文件,本质是软件,管道写端退出了,读端一直在读,操作系统就会认为条件不满足,就会发13号信号让该进程退出。

14)SIGAKARM alarm信号

 设置一个闹钟,到了时间执行对应指令,默认动作时term终止进程。

#include <unistd.h>
unsigned int alarm(unsigned int seconds);
调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发SIGALRM信号, 该信号的默认处理动
作是终止当前进程。
这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。打个比方,某人要小睡一觉,设定闹钟为30分钟之后响,20分钟后被人吵醒了,还想多睡一会儿,于是重新设定闹钟为15分钟之后响,“以前设定的闹钟时间还余下的时间”就是10分钟。如果seconds值为0,表示取消以前设定的闹钟,函数的返回值仍然是以前设定的闹钟时间还余下的秒数。
alarm(0) 取消闹钟

闹钟函数是一个系统调用,设定闹钟,本质是在OS内部设定的,操作系统要定期将用户级的数据从缓冲区刷新到外设,此时就要求操作系统具有定时功能, 所以操作系统内部存在很多闹钟,所以就需要先描述再组织,此时就有一个alarm结构体,而判断闹钟是否到了时间只需要将闹钟设置的时间和现在的时间进行比较,如果时间到了就触发,所以我们可以建立一个最小堆,每次只需要判断堆顶的数据是否超时就可以。

2.2硬件中断

1. 用户输入命令,在Shell下启动一个前台进程。
用户按下Ctrl-C ,这个键盘输入产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程前台进程因为收到信号,进而引起进程退出。
而键盘是如何转变为信号从而被进程识别的呢?
首先键盘按下以后有两种情况,一种是正常作为 字符输入,一种是 组合键输入组合键输入的是命令。由OS来判断输入的是字符还是命令。而操作系统得知是否有数据输入就是采用中断的方式。
OS中存在一个中断向量表,CPU在执行代码时如果用户输入组合键,CPU就会有特定的针脚收到键盘传来的高电频,从而触发硬件中断,而每个针脚都有编号,而这个编号就叫中断号,然后将中断号放到寄存器中,然后OS拿着中断号去向量表执行相关方法,然后将字符放到键盘缓冲区。
如果输入的ctrl+c OS就把其解释为2号信号然后发给进程  。
硬件异常被硬件以某种方式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号。例如当前进程执行了除以0的指令,CPU的运算单元会产生异常,内核将这个异常解释 为SIGFPE信号发送给进程。再比如当前进程访问了非法内存地址,,MMU会产生异常,内核将这个异常解释为SIGSEGV信号发送给进程。
        

2.3异常

8)SIGFPE 除0异常

11)SIGSEGV 野指针

2.4信号处理的常见方式

1. 忽略此信号。
2. 执行该信号的默认处理动作。
3. 提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(Catch)一个信号。

三、Core Dump和term

首先解释什么是Core Dump。当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部 保存到磁盘上,文件名通常是core,这叫做Core Dump。进程异常终止通常是因为有Bug,比如非法内存访问导致段错误,事后可以用调试器检查core文件以查清错误原因,这叫做Post-mortem Debug(事后调试)。一个进程允许产生多大的core文件取决于进程的Resource Limit(这个信息保存 在PCB中)。默认是不允许产生core文件的,因为core文件中可能包含用户密码等敏感信息,不安全。在开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件。 首先用ulimit命令改变Shell进程的Resource Limit,允许core文件最大为1024K: $ ulimit -c1024。

在Linux信号中,绝大部分信号都会执行core或term,其效果都是终止进程,那么二者之间有什么区别呢。

core

比如代码发生除0错误时就会引发core,此时编译器会报错,但在当前目录下依旧会形成可执行文件,此时执行可执行文件就会出现Float Point exception 也就是除0错误。

ulimit-a查看core是否被打开

ulimit-c num打开core dump功能,num按需求去取,单位是block,此时当前目录下就会形成一个core文件。

再次运行除零错误的代码依旧会报错,Float Point exception (core dumped)。

所以为什么要有core文件呢?OS可以通过core文件定位到进程为什么退出,以及执行到哪一行退出的。

core文件是什么呢?将进程在内存中的核心数据(与调试有关)转储到磁盘中形成core/core.pid的文件。

而core文件的功能就是协助我们进行调试。

以下运行一个代码,假设代码中包含除0错误,生成可执行后,gdb可执行程序,输入 core-file指令就会显示出代码出问题的行数。

  这种方式也叫事后调试。

而云服务器一般都是默认关闭核心转储功能,也就是默认将进程core退出,进行了特定的设定,默认core是被关闭的。

在线上服务中,最重要的就是让服务功能持续的跑起来,而一旦代码出现问题,如果此时core是开启的就会在当前路径下形成一个core文件,core文件也是很大的,如果问题没有得到及时的解决,可能os就会一直形成core文件,从而不断的占用磁盘空间。主要是防止未知的core dump一直在进行。

而在unbuntu中即使打开了core也不会像centos下在core文件后缀pid,这样即使一直生成core文件也只会在当前目录下反复覆盖生成一个core,就很好的规避了上述问题。

 而在进程控制中的这个core dump标志就表示是否发生了核心转储,为0表示没有发生,1表示发生了。 

term

term就是正常的直接退出

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

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

相关文章

用友crm客户关系管理ajax/uploadfile.php接口存在任意文件上传漏洞 附POC

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 用友crm客户关系管理简介 微信公众号搜索:南风漏…

深度学习之基于YoloV5钢材微小缺陷检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与目标 在钢材生产过程中&#xff0c;由于各种因素&#xff0c;钢材表面可能会出现微小缺陷&#xff…

民国漫画杂志《时代漫画》第9期.PDF

时代漫画09.PDF: https://url03.ctfile.com/f/1779803-1247458198-d4cf8b?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

基于地理坐标的高阶几何编辑工具算法(5)——合并相交面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 选中一个面&#xff0c;点击“合并相交面”工具&#xff0c;选择其他相邻面&#xff0c;空格执行合并。 应用场景 用于将相邻或相交的同类型几何面进行合并&#xff0c;达到综合效果。 算法输入 待…

高通Android 12/13 设置和获取ADB状态

/*** 设置ADB状态** param isEnable*/public void setADB(boolean isEnable) {Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ADB_ENABLED, isEnable ? 1 : 0);}/*** 获取ADB状态** return*/public boolean getADB() {return Settings.Global.getIn…

宝兰德亮相CHIMA 2024,科技赋能医疗行业数字化革新

近日&#xff0c;CHIMA2024中国医院信息网络大会暨中外医疗信息技术和产品展览会在南京国际展览中心举行。本次大会以新质生产力理论为指导&#xff0c;以“深化应用&#xff0c;融合创新&#xff0c;信息技术赋能医院高质量发展”为主题。宝兰德受邀出席本次会议&#xff0c;在…

Parquet使用指南:一个超越CSV、提升数据处理效率的存储格式

前言 在大数据时代&#xff0c;数据存储和处理的效率越来越重要。同时&#xff0c;我们在工作中处理的数据也越来越多&#xff0c;从excel格式到csv格式&#xff0c;从文件文档传输到直接从数据库提取&#xff0c;数据单位也从K到M再到G。 当数据量达到了G以上&#xff0c;几…

视频监控管理平台LntonCVS监控视频汇聚融合云平台主要功能应用场景介绍

随着网络技术的不断发展和万物互联时代的到来&#xff0c;视频融合在一些系统集成项目及综合管理应用中变得日益重要。本文以LntonCVS视频融合云平台为案例&#xff0c;探讨视频融合的对象及其应用场景。 1. 视频监控设备 视频监控摄像设备是各种视频应用项目的基础部分。在视…

互联网医院系统|HIS系统开发|互联网医院HIS系统

互联网医院结合互联网技术与医疗服务&#xff0c;提供诊疗、处方、药品配送等服务。开发涉及需求分析、系统设计、核心技术实现、开发与测试、部署与运维等环节&#xff0c;确保系统安全、高效、易用&#xff0c;提供优质医疗。下面小编就给大家讲解下互联网医院开发优势。 1、…

聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用

哈喽大家好&#xff0c;我是咸鱼。 最近写的一个 Python 项目用到了 jwcrypto 这个库&#xff0c;这个库是专门用来处理 JWT 的&#xff0c;JWT 全称是 JSON Web Token &#xff0c;JSON 格式的 Token。 今天就来简单入门一下 JWT。 官方介绍&#xff1a;https://jwt.io/intr…

深度学习 --- stanford cs231 编程作业(如何在chrome中安装colab)

stanford cs231 编程作业(如何开始你的colab编程&#xff09; 斯坦福231n的所有作业都要求在colab里面做&#xff0c;colab可以为你提供免费的云计算。实际上在他的官网中也有关于如何安装colab的详细说明视频。 https://youtu.be/DsGd2e9JNH4https://youtu.be/DsGd2e9JNH4 我…

一顿五元钱的午餐

在郑州喧嚣的城市一隅&#xff0c;藏着一段鲜为人知的真实的故事。 故事的主角是一位年过半百的父亲&#xff0c;一位平凡而又伟大的劳动者。岁月在他脸上刻下了深深的痕迹&#xff0c;但他眼神中闪烁着不屈与坚韧。 他今年52岁&#xff0c;为了给远在家乡的孩子们一个更好的…

Springboot+Vue项目-基于Java+MySQL的游戏交易系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

计算机精选期刊特辑

文章目录 一、征稿简介二、合作期刊三、投稿咨询四、咨询 一、征稿简介 艾思科蓝依托互联网信息与数据库技术、整合渠道与合作资源&#xff0c;提供EI/SCI/SCIE/SSCI期刊论文的内容审查、发表支持等服务。艾思科蓝与多所知名出版社达成战略合作关系&#xff0c;持续开展合作征…

社群裂变新趋势:哪些企业正在领跑市场?

在数字化时代&#xff0c;社群裂变已成为企业快速增长、扩大市场份额的重要策略。那么&#xff0c;哪些企业正在领跑这一新趋势&#xff0c;通过社群裂变实现品牌与市场的双赢呢&#xff1f; 首先&#xff0c;不得不提的是那些深耕私域领域多年的企业。这些企业通过长期的用户运…

民国漫画杂志《时代漫画》第15期.PDF

时代漫画15.PDF: https://url03.ctfile.com/f/1779803-1247458444-8befd8?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

打造高效安全新标杆:智慧楼宇视频智能管理系统的建设探索

大数据、人工智能、5G等技术在城市中的不同应用也让人们看到了数字化和智能化技术赋予城市管理的巨大潜力&#xff0c;为更多城市数字化应用场景的发展带来机遇。在新基建的大背景下&#xff0c;人工智能、物联网等先进技术与基础设施的深度融合&#xff0c;将大力推进电网、楼…

Mongodb介绍及springboot集成增删改查

文章目录 1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 2. docker安装mongodb3. springboot集成3.1 文件结构3.2 增删改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查询3.2.5 删除 1. MongoDB相关概念 1.1 业务…

Linux系统查看GPU型号的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

DolphinScheduler 3.3.0版本更新一览

Apache DolphinScheduler即将迎来3.3.0版本的发布&#xff0c;届时将有一系列重要的更新和改进。在近期的社区5月份用户线上分享会上&#xff0c;项目PMC 阮文俊为大家介绍了3.3.0版本将带来的主要更新和改进&#xff0c;并为大家指出了如何参与社区的方式。 什么是DolphinSch…