【Linux】:信号的产生

信号

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

在这里插入图片描述

一.前台进程和后台进程

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六.通过终端按键产生信号

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

core

在这里插入图片描述

term(以2号信号终止)

在这里插入图片描述

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

查看

在这里插入图片描述

开启core

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

core文件里会记录具体哪一行代码出现错误。直接使用gdb就可以调试。

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

在这里插入图片描述

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

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

相关文章

【云备份】数据管理模块

文章目录 1. 数据管理模块要管理什么数据?2. 数据管理模块如何管理数据?3. 数据管理模块的具体实现BackupInfo 数据信息类NewBackupInfo —— 获取各项属性信息 DataManager 数据管理类构造函数析构函数insert —— 新增update —— 修改GetOneByURL——…

数据结构之时间复杂度与空间复杂度

1.算法效率 1.1 如何衡量一个算法的好坏&#xff1f; 比方说我们非常熟悉的斐波拉契数列&#xff1a; long long Fib(int N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); } 递归实现方式非常简洁&#xff0c;但一定好吗&#xff1f;如何衡量其好与坏&#xff1f; 1…

JVM——垃圾回收器(Serial,SerialOld,ParNew,CMS,Parallel Scavenge,Parallel Old)

目录 1.垃圾回收器的组合关系1.年轻代-Serial垃圾回收器2.老年代-SerialOld垃圾回收器3.年轻代-ParNew垃圾回收器4.老年代- CMS(Concurrent Mark Sweep)垃圾回收器CMS执行步骤&#xff1a;CMS垃圾回收器存在的问题缺点&#xff1a;CMS垃圾回收器存在的问题 – 线程资源争抢问题…

机器学习——支持向量机(SVM)

1.线性支持向量机 1.1数学模型 机器学习最终都是求解目标函数的最优问题&#xff1b; 一般都是讲问题转化为最小值来求解。 数学模型获得是一个不等式约束的最小化问题&#xff0c;求解时可通过构建拉格朗日函数求解。 1.2 拉格朗日函数及对偶问题求解 1.3 SMO算法求解 SMO算…

鸿蒙应用开发-初见:ArkTS

作者&#xff1a;HarderCoder ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 基本语法 …

Redis Lua沙盒绕过 命令执行(CVE-2022-0543)漏洞复现

Redis Lua沙盒绕过 命令执行(CVE-2022-0543)漏洞复现 Redis如果在没有开启认证的情况下&#xff0c;可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。–那么这也就是redis未授权访问了 Redis的默认端口是6379 可以用空间测绘搜索&#xff…

【青蛙跳台阶问题 —— (三种算法)】

青蛙跳台阶问题 —— (三种算法&#xff09; 一.题目介绍1.1.题目1.2.图示 二.解题思路三.题解及其相关算法3.1.递归分治法3.2.动态规划算法&#xff08;Dynamic Programming&#xff09;3.3.斐波那契数列法 四.注意细节 一.题目介绍 1.1.题目 一只青蛙一次可以跳上1级台阶&am…

GWAS 分析模型 | FaST-LMM

GWAS 分析模型 | FaST-LMM FaST-LMM (Factored Spectrally Transformed Linear Mixed Models) 是一个用于进行全基因组关联分析&#xff08;GWAS&#xff09;的模型。与标准混合线性模型相比&#xff0c;FaST-LMM 通过对遗传相似性矩阵进行单次谱分解来减少计算资源消耗并提升运…

超全超实用行业解决方案合集,覆盖十大行业数据应用需求

现代企业面对复杂的业务需求&#xff0c;对数据分析的需求日益增加。 从实时销售到市场趋势&#xff0c;从客户行为到产品优化&#xff0c;每个环节都依赖于数据支持。然而&#xff0c;传统的数据分析平台常分散在不同系统和团队中&#xff0c;形成数据孤岛&#xff0c;降低了…

企业如何保障跨境金融业务中的数据安全传输?

随着全球化的不断深入&#xff0c;跨境金融业务日益频繁&#xff0c;然而在这些业务中&#xff0c;数据的安全传输一直是企业面临的重大挑战。跨境业务数据传输可能会遇到多种困难&#xff0c;如网络攻击、数据泄露、通信故障等。因此&#xff0c;企业需要采取有效的措施来确保…

C#,《小白学程序》第二十二课:大数的乘法(BigInteger Multiply)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// </summary> p…

漏洞复现--致远 M3 反序列化 mobile_portal RCE

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

AIGC系列之:DDPM原理解读(简单易懂版)

目录 DDPM基本原理 DDPM中的Unet模块 Unet模块介绍 Unet流程示意图 DownBlock和UpBlock MiddleBlock 文生图模型的一般公式 总结 本文部分内容参考文章&#xff1a;https://juejin.cn/post/7251391372394053691&#xff0c;https://zhuanlan.zhihu.com/p/563661713&…

03 项目运行

前面两篇文章对项目架构+源码架构做了分析,这篇文章先将服务部署一下,能够让大家有个直观的感受。 组件资源 项目运行的各种组件已经为你准备好了,有需要的直接百度云盘下载: 链接:https://pan.baidu.com/s/1hN6qf20gamMHPmA_qXwsLg提取码:o4k9MySQL数据库创建 找到的…

2023年最新Dev-C++下载安装以及C语言环境搭建教程(C语言入门)

文章目录 写在前面C语言简介Dev-C简介Dev-C下载安装Dev-C使用教程 写在后面 写在前面 2023年最新Dev-C下载安装以及C语言环境搭建教程&#xff0c;快来看看吧&#xff01; C语言简介 C语言是一种通用的高级程序设计语言&#xff0c;由美国计算机科学家Dennis Ritchie于20世纪…

51单片机的智能窗帘系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DS18B20温度模块DS1302时间模块光敏传感器步进电机蓝牙等模块构成。适用于智能窗帘、智能门窗家具等相似项目。 可实现基本功能: 版本一&#xff1a; 1、LCD1602实时显示北京时间、环境温度、光照强度、手动/自动控制等信息…

什么是磁矩?磁矩与磁通的关系

物质的磁性来源于原子中的电子磁矩 物质由原子构成&#xff0c;而原子是由原子核和电子组成的。在原子中&#xff0c;电子因绕原子核运动而具有轨道磁矩&#xff1b;电子因自旋具有自旋磁矩&#xff0c;原子的磁矩主要来源于电子磁矩&#xff0c;这是一切物质磁性的来源。 磁…

Golang 设置运行的cpu数与channel管道

介绍&#xff1a;为了充分了利用多cpu的优势&#xff0c;在Golang程序中&#xff0c;设置运行的cpu数目。 func main() {//获取系统当前cpu的数量num : runtime.NumCPU()//这里根据需求来设置整个go程序去使用几个cpuruntime.GOMAXPROCS(num)fmt.Println("num ", nu…

kafka集群环境部署

文章目录 1 Kafka集群2 搭建两台服务器2.1 zookeeper部署2.2 启动1号机器的broker2.3 启动2号机器的broker2.4 查看kafka集群2.5 测试集群 1 Kafka集群 2 搭建两台服务器 2.1 zookeeper部署 zookeeper先只部署一台&#xff0c;在1号机器&#xff08;192.168.11.59&#xff09;…

图解系列--Http

1.URI和URL 1.1.URL URL是统一资源定位符。URL正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。比如&#xff0c;http://hackr.jp/就是 URL。 1.2.URI 统一资源标识符。 URI 用字符串标识某一互联网资源&#xff0c;而URL表示资源的地点&#xff08;互联网上所处的位…