【Linux】:信号(一)产生

信号

  • 一.前台进程和后台进程
    • 1.前台进程
    • 2。后台进程
    • 3.总结
  • 二.自定义信号动作接口
  • 三.信号的产生
    • 1.键盘组合键
    • 2.kill+信号+进程pid
    • 3.系统调用
      • 1.kill函数
      • 2.raise函数
      • 3.abort函数
  • 四.异常
  • 五.软件条件
  • 六.core文件

在这里插入图片描述

一.前台进程和后台进程

1.前台进程

一个简单的代码演示

在这里插入图片描述

在这里插入图片描述

像这种程序在运行时,不能执行其他命令并且可以被ctrl+c终止的进程被称为前台进程。

2。后台进程

我们另外打开一个窗口,在另一个窗口运行程序。

在这里插入图片描述

这样在当前进程我们依然可以使用各种命令,但是该进程不能被ctrl+c终止,这样的进程被称为后台进程。

前台进程加个&也能变成后台进程。
在这里插入图片描述

在这里插入图片描述

可以通过进程的pid使用kill直接终止。

在这里插入图片描述

3.总结

Linux中,一次登陆中,一个终端,一般会配上一个bash,每一个登陆,只允许一个进程是前台进程,可以允许多个进程是后台进程。两者的本质区别就是谁来获取键盘输入。

为什么使用Ctrl c能将前台进程终止呢?就是因为前台进程能够读取到键盘输入,而ctrl c的本质就是发送一个2号信号。

在这里插入图片描述

我们把1到31号信号称为普通信号(产生后不必立即处理),后面的称为实时信号(一旦产生必须处理)。下面我们只对普通信号进行讨论。

信号的处理方式一般有三种:
1.默认处理 (例如2号信号的默认动作就是终止自己)
2.忽略信号
3.自定义方式(信号捕捉)。

二.自定义信号动作接口

在这里插入图片描述

第一个参数:指定要进行自定义的信号。

第二个参数:一个函数,要自定义的动作,该函数的返回值是void,参数表示该信号。

例如:2号信号默认是终止,接下来把它更改一下

在这里插入图片描述

在这里插入图片描述

注意:

  1. Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。

  2. Shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像 Ctrl-C 这种控制键产生的信号。

  3. 前台进程在运行过程中用户随时可能按下 Ctrl-C 而产生一个信号,也就是说该进程的用户空间代码执行到任何地方都有可能收到 SIGINT 信号而终止,所以信号相对于进程的控制流程来说是异步(Asynchronous)的。

  4. 为什么操作系统能够读到ctrl+c呢?因为cpu实际上与键盘的一部分是直接相连的,当键盘开始输入时就会直接向CPU发送一个硬件中断,然后CPU就会让操作系统来读取键盘的输入,最后将输入内容进行相应的解读。

三.信号的产生

1.键盘组合键

上面已经介绍了ctrl+c—>信号2。这就是一种键盘组合键

ctrl+\ ->信号3

在这里插入图片描述

在这里插入图片描述

ctrl+z->19号

在这里插入图片描述

在这里插入图片描述

可以看到它并没有如我们预期那样打印,说明它是不能被捕捉的。

所以不是所有信号都能被捕捉。

2.kill+信号+进程pid

我们经常使用kill+进程pid终止程序,kill也常用来给进程发送信号,例如接下来给进程分别发送1,2,3信号。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.系统调用

1.kill函数

系统调用函数也可以直接发送命令。

在这里插入图片描述

示例

在这里插入图片描述

另外创建一个死循环程序,用该程序终止。

在这里插入图片描述

在这里插入图片描述

2.raise函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.abort函数

在这里插入图片描述

它是引起一个正常的进程直接终止。给自己发一个6号信号。

在这里插入图片描述

四.异常

一个程序发生异常本质上是收到了信号。

各种异常

在这里插入图片描述

在这里插入图片描述

很明显出现了异常并且只打印出了上面一句话,后面并没有进行打印。实际上这是接收了8号信号。

在这里插入图片描述

在这里插入图片描述

这是一个最常见的段错误。它收到了11号信号。

原因

注意任何异常都只能给当前进程造成影响,不会波及其他进程。

为什么/0和野指针会导致进程崩溃呢?这是因为当运行这种代码时,会给进程发送异常信号,导致进程崩溃。

为什么/0和野指针会给进程发送信号呢?在CPU里有一个寄存器叫状态寄存器,在状态寄存器里有一个溢出标志位,当在做/0操作时,那么就直接溢出了,而溢出标志位就由0变为1,从而被操作系统识别,之后操作系统就能对信息做出处理。

那么野指针呢?在操作系统里有一个页表用来转换虚拟地址和物理地址,而野指针就是地址转换失败。一旦失败,就会把失败地址传回CPU寄存器里。

总结:操作系统怎么知道是溢出异常还是段错误呢?本质就是因为不同的报错对应的是不同CPU寄存器(硬件)的报错。

五.软件条件

异常只会由硬件产生吗?答案是当然不是。

还记得管道吗?一个进程进行写入,另一个进程进行读取。如果我们将读端关掉,那么写端也会关闭并且会发送13号信号。这其实就算一种软件异常。

alarm

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六.core文件

在这里插入图片描述

在这里插入图片描述

一个进程在使用wait退出时会返回对应退出码(8-15位),而进程异常会收到退出信号(0-6位),第7位是coredum,它表示进程在终止的时候表示是core终止方式还是term终止方式。

在这里插入图片描述

core

在这里插入图片描述

term(以2号信号终止)

在这里插入图片描述

我们发现两者的core位都是0,怎么回事呢?其实是云服务器上的core功能默认是关闭的。

查看

在这里插入图片描述

开启core

在这里插入图片描述

在这里插入图片描述

在这之后形成了一个core文件。

在这里插入图片描述

core文件里会记录具体哪一行代码出现错误。直接使用gdb就可以调试。实际上Core文件在很多时候都是被禁止的,因为一般公司里当一个服务器因为异常被关闭时它就会自动重启,而每次重启又遇到异常,就又会生成一个Core文件。计算机的速度很快,往往一瞬间就会重启很多次,从而导致生成多个Core文件把内存占满。

信号发送其实本质上是给进程的PCB发。

在这里插入图片描述

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

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

相关文章

java中反射知识点概念

这里写自定义目录标题 1.什么是反射--动态注入?2.反射的诞生背景3.反射的意义4.反射后可以做些什么5.反射相关的主要API6.反射的优缺点7.反射和不反射基础使用8.工厂模式使用反射8.1首先我们来看看不使用反射的情况:8.2使用反射的情况: 9.Jav…

Cesium.CustomShader颜色值显示错误

官方示例: Cesium Sandcastle 测试过程: 1、修改示例,把customshader中的fragmentShaderText替换为如下代码 void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {//注意:下述颜色的b值是0.1&#x…

智能配电箱监控系统

智能配电箱监控系统是一种用于实时监控配电箱运行状态和电能质量的系统。它通过集成应用物联网技术,实现对配电箱的数据采集、整合和处理,从而让工作人员能够远程了解和掌握配电箱的情况。通过电力设备的数字化,依托电易云-智慧电力物联网&am…

数字孪生3D场景开发工具:弥补不足,开拓全新可能

随着数字化时代的来临,越来越多的企业和行业开始探索数字孪生技术的应用。数字孪生是指通过数字技术将现实世界中的物体、场景等复制到虚拟世界中,以实现实时监测、预测和优化。然而,在数字孪生的发展过程中,一些不足也逐渐浮现。…

如何去选择合适的线缆测试仪?CAT8网线认证测试

如何去选择合适的线缆测试仪? 如果你是第三方检测单位,系统集成商,或者线缆生产厂家,我个人建议选择福禄克DSX系列无疑是比较保险的做法,因为考虑到福禄克在国内耕耘多年所积累起来的品牌知名度和口碑,选择一款大家都…

PHP程序员必备技能:OSS云存储实现教程!

近些年来,云存储的应用越来越广泛,阿里云的OSS云存储服务也在国内市场中占据了一席之地。在此基础上,本文将分享如何使用PHP实现OSS云存储。 首先,我们需要在阿里云官网上注册一个账号并创建一个OSS存储空间。创建步骤在官方文档…

振南技术干货集:各大平台串口调试软件大赏(4)

注解目录 (串口的重要性不言而喻。为什么很多平台把串口称为 tty,比如 Linux、MacOS 等等,振南告诉你。) 1、各平台上的串口调试软件 1.1Windows 1.1.1 STCISP (感谢 STC 姚老板设计出 STCISP 这个软件。&#xf…

相机标定张正友、opencv和halcon对比(1)

本文将从基本标定开始,结合实际工作经验,分析张正友、opencv和halcon三者相机标定的深层原理与不同之处,内容比较多,如果出现错误请指正。 相机光学模型 我们使用的镜头都是由多组镜片组成,它实际上是一种厚透镜模型…

羊大师提问,为什么吃得越咸越容易出现健康问题?

羊大师提问,为什么吃得越咸越容易出现健康问题? 在现代社会中,有一种追求咸味食物的趋势,许多人都钟爱于吃咸味食物。吃咸味食物往往容易导致健康问题,引发各种疾病。那么为什么吃的越咸越容易生病呢? 今…

C++二分查找算法:132 模式枚举3

说明 本篇是视频课程的讲义,可以看直接查看视频。也可以下载源码,包括空源码。 本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法:132 模式解法一枚举3C二分查找算法:132 模式解法二枚举2代码…

黑洞:宇宙中最神秘的天体

黑洞:宇宙中最神秘的天体 一、引言 在浩瀚的宇宙中,有一种神秘的天体,它强大到连光也无法逃逸,这就是黑洞。自从黑洞理论被提出以来,它一直是物理学家和天文学家研究的焦点。尽管我们还无法直接看到黑洞,…

使用 Redis Zset 有序集合实现排行榜功能(SpringBoot环境)

目录 一、前言二、Redis Zset 的基本操作三、通过Redis 命令模拟排行榜功能3.1、排行榜生成3.2、排行榜查询 四、SpringBoot 使用 Redis Zset 有序集合实现排行榜功能 一、前言 排行榜功能是非常常见的需求,例如商品售卖排行榜单、游戏中的积分排行榜、配送员完单排…

VirtualBox上安装CentOS7

基础环境:宿主机是64位Windows10操作系统,通过无线网访问网络。 macOS可以以类似方式进行安装,不同之处见最后补充。 Step1 安装VirtualBox VirtualBox是一款免费、开源、高性能的虚拟机软件,可以跨平台运行,支持Wi…

【神印王座】永恒之塔秘密透露,林鑫告白李馨,皓晨采儿甜蜜接吻

Hello,小伙伴们,我是拾荒君。 《神印王座》第83集如期而至,带来了令人期待已久的更新。与众多热情的观众一样,拾荒君一得到更新消息,便急不可耐地观赏起来。这一集中,龙皓晨随着月魔宫的月夜商队成功抵达联盟&#xf…

C++: string的模拟实现

C: string的模拟实现 一.前置说明1.模拟实现string容器的目的2.我们要实现的大致框架 二.默认成员函数1.构造函数2.拷贝构造函数1.传统写法2.现代写法 3.析构函数4.赋值运算符重载1.传统写法2.现代写法 三.遍历和访问1.operator[]运算符重载2.iterator迭代器 四.容量相关函数1.…

ssm+vue的公司安全生产考试系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的公司安全生产考试系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结…

探索前端设计的新境界——介绍IVueUI工具助力Vue页面设计

在快速发展的前端领域,Vue.js作为一款渐进式JavaScript框架,一直备受开发者喜爱。然而,在Vue前端开发的旅程中,页面设计常常是一个不可避免的挑战。今天,我要向大家介绍一款令Vue前端开发者受益匪浅的工具——www.ivue…

Python文件操作

目录 一.文件的编码二.文件的读取三.文件的写入四.文件的追加五.文件操作综合案例 一.文件的编码 编码就是一种规则集合,记录了内容和二进制进行相互转换的逻辑。最常见的是UTF-8编码计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。同时…

“大+小模型”赋能油气行业高质量发展

近日,中国石油石化科技创新大会暨新技术成果展在北京盛大举行,九章云极DataCanvas公司携油气行业一站式AI综合解决方案重磅亮相,充分展示了公司助推油气行业实现AI规模化应用深厚的AI技术实力和领先的AI应用水准,赢得了行业专家和…

spring boot整合Jasypt实现配置加密

文章目录 目录 文章目录 前言 一、Jasypt是什么? 二、使用步骤 1.引入 2.测试使用 3.结果 总结 前言 一、Jasypt是什么? Jasypt(Java Simplified Encryption)是一个Java库,提供了一种简单的加密解密方式&#xff0c…