【linux进程信号(一)】信号的概念以及产生信号的方式

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到精通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


在这里插入图片描述

进程信号

  • 1. 前言
  • 2. 信号的基本概念
  • 3. 信号产生的方式概述
  • 4. 核心转储讲解
  • 5. 如何理解信号发送的本质?
  • 6. 总结

1. 前言

在实际生活中有很多信号的例子,比如红灯停,绿灯行.我们是怎样知道这些信号的呢?首先要识别这个信号,并且要知道如何处理这个信号,在Linux系统中的信号也是如此,至少要做到两点: 识别信号,处理信号

本章重点:

本篇文章着重讲解Linux下信号的基本
概念以及产生信号的四种方式,本篇文章
会带领大家入门信号这一篇章


2. 信号的基本概念

先给结论,什么是Linux信号?

本质是一种通知机制,用户或操作系统通过发送一定的信号,通知进程,某些事件已经发生,你可以在后续对它进行处理

在这里插入图片描述

使用kill -l命令查看信号列表

在这里插入图片描述

CTRL+c就是向进程发送2号信号

结合进程和信号,我们得出下面的结论:

  1. 进程要处理信号,必须具备识别信号的能力(看见信号+处理信号)
  2. 凭什么进程能够识别信号?是事先程序员就内置了一套代码用于识别+处理信号
  3. 信号的产生是随机的,收到信号时,此进程可能正在忙于其他事情,所以收到信号可能并不是立刻就处理,可能是后续处理
  4. 既然信号不是立刻就处理的,那么一定存在某种结构来短暂保持收到的信号

对于信号的理解可以分为: 信号的产生,保存以及处理

而本篇文章讲解的则是信号的产生,
信号的产生一共有四种方式:

  1. 终端按键产生信号
  2. 使用系统调用产生信号
  3. 由软件条件产生信号
  4. 由硬件条件产生信号

3. 信号产生的方式概述

  1. 方式一: 终端按键

我们可以使用CTRL+c或CTRL_/的
方式产生信号,并且CTRL+c产生的是
2号信号,也就是SIGINT信号,然而
CTRL+/产生3号信号,也就是SIGQUIT

1~31号信号是普通信号,也是要重点学习的,
34~64号信号是实时信号,不多谈

使用man 7 singal查看信号描述

在这里插入图片描述
Term代表终止这个进程,这也就是为什么
CTRL+c可以终止进程的原理,core会在
后面进行讲解

  1. 方式二: 系统调用

在函数中调用kill,raise,abort等函数也能产生信

在这里插入图片描述

kill是向指定进程发送指定的信号

在这里插入图片描述

raise是向自己发送指定的信号

在这里插入图片描述

abort是终止当前进程(发送6号信号)

  1. 方式三: 软件条件

请大家注意第13号信号,SIGPIPE,当我们在学习管道时会遇见这种情况,管道读端不光不读了,并且还把读端关闭了,而写端还在写,此时操作系统会自动终止写进程.怎样终止的呢?是OS向写端发送了SIGPIPE信号而终止了进程

  1. 方式四: 硬件异常

在这里插入图片描述

最典型的除0错误,指针系列错误以及段错误都是由于硬件异常而产生的信号,从而导致进程被终止

所有的信号都有它的来源,但最终全部都被操作系统识别,解释,并且发送给进程


4. 核心转储讲解

在查看信号的描述时,我们会注意到
某些信号的默认行为是core,也就是
核心转储

核心转储指的是,当进程出现某种异常时,是否由操作系统将当前进程在内存中的相关核心数据,转移到磁盘中,如果核心转储被设置,则会转移到磁盘,反之则不会,若信号的默认做法是core,则在终止进程的同时会发生核心转储,目录中会多出一共文件

当代码异常终止,并且发生核心转储后,使用gdb调试时只需输入: core file即可定位到出错的行

在这里插入图片描述


5. 如何理解信号发送的本质?

上面说到,信号被进程接收到后不会立马处理,
那么就要存在一个结构来保存信号,什么结构
最合适?我给出的答案是位图!

信号有1~31号信号,那么只需要31个
bit位即可保存完所有的信号,x号bit
位中的0/1代表是否收到第x号信号,
而这个位图结构是每个进程独有的,
所以它很明显在进程的PCB中保存

`信号发送的本质: 操作系统向目标进程发送信号,也就是操作系统直接修改PCB中指定的位图结构,修改完成后即为成功发送信号


6. 总结

本篇文章只是打响了认识信号的
第一枪,关于信号的细节还有很多,
包括进程是如何保存信号的细节,以及
进程是如何捕捉到信号的,这些都会
在后面的文章中一一讲解


🔎 下期预告:信号的保存以及处理 🔍

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

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

相关文章

亿道推出重磅加固平板!为行业发展注入新动力

随着科技生产力的不断发展,各行各业都得到质的飞跃。产品的迭代速度也大大加快,作为全球领先的加固行移动终端一站式提供商,亿道信息跟紧时代潮流,推出EM-I10J、EM-I20J两款均衡型加固平板,为行业发展注入新动力。 接地…

YOLOv8 DeepSORT实现智能交通监控-改进yolo单目测距及速度测量-流量计数

YOLOv8:目标检测算法详解 YOLO(You Only Look Once)系列是一种单阶段、实时的目标检测框架,其最新迭代版本YOLOv8继承并优化了前代YOLO在速度与精度上的优势。YOLOv8的核心思想在于将整幅图像一次性输入到神经网络中,直…

dpdk协议栈之udp架构优化

dpdk优势 传统网络架构与 DPDK(Data Plane Development Kit)网络架构之间存在许多区别,而 DPDK 的优势主要体现在以下几个方面: 数据包处理性能:传统网络架构中,网络数据包的处理通常由操作系统的网络协议…

【学习笔记】Serdes中的高速接口设计

参考文献: 一、绪论 1.1 背景 “串行替代并行”: 串行传输使用差分信号传输以传输更长距离; 并行传输因串扰无法长距离传输;并行线路对信号偏斜量的要求,限制了最大的传输速率。 SerDesSerializer Deserializer S…

2024程序员容器化上云之旅-第2集-Ubuntu-WSL2-Windows11版:接近深洞

故事梗概 Java程序员马意浓在互联网公司维护老旧电商后台系统。 渴望学习新技术的他在工作中无缘Docker。 他开始自学Vue3并使用SpringBoot3完成了一个前后端分离的Web应用系统,并打算将其用Docker容器化后用K8s上云。 3 挑选工具 马意浓画好架构图后&#xff…

基于yolov5的行人跌倒检测,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的行人跌倒检测系统,支持图像检测,视屏检测和摄像头检测_哔哩哔哩_bilibili (一)简介 基于yolov5的行人跌倒检测系统是在pytorch框架下实现的,这是一个完整的项目,包括代…

蜣螂优化算法DBO求解不闭合SD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)

一、蜣螂优化算法(Dung beetle optimizer,DBO) 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发所得…

vue2、vue3各自的响应式原理

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

.[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞

有朋友oracle数据库所在机器被加密,扩展名为:.[hudsonLcock.li].mkp,数据文件类似: 通过专业工具分析,确认这次运气非常好,每个文件就加密破坏前面31个block 通过研发的Oracle数据文件勒索恢复工具进行恢复 顺利数据库并且导出数据 mkp勒索病毒预…

R绘图 | 单列数据的分布图,对A变量分bin求B变量的平均值

问题1&#xff1a;单个向量的 density 分布图&#xff1f; (1) 模拟数据 set.seed(202402) datdiamonds[sample(nrow(diamonds), 1000),]> head(dat) # A tibble: 6 10carat cut color clarity depth table price x y z<dbl> <ord> &l…

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树:star:思路分析递归解法 105. 从前序与中序遍历序列构造二叉树递归解法 ---------------&#x1f388;&#x1f388;题目链接&a…

python Matplotlib Tkinter-->tab切换3

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox import …

学成在线_课程计划查询_前端页面无法跳转

问题描述 在进行课程计划查询的接口开发时通过了http-client测试但点开课程修改界面后点击保存并进行下一步时无法跳转到修改课程计划查询的页面。 问题原因 课程信息修改的Controller层没有实现 QAQ&#xff08;可能是老师在讲这一块的时候没有提这一点&#xff08;我也记…

数据脱敏(八)静态脱敏

HuggingFists低代码平台提供Mysql,Postgresql,Oracle,ClickHouse等多种数据库连接插件及配套读写算子。提供ftp,sftp,百度盘&#xff0c;阿里云文件系统&#xff0c;腾讯文件系统等多种文件系统连接插件及配套读写算子。满足用户静态脱敏场景下各种数据源要求。 静态脱敏-数据库…

6.Z字形变换

题目&#xff1a;s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a; 之后&#xff0c;你的输出需要从左往右逐行读取&#xff0c;产生出一个新的字符串&a…

2024图像处理分析与信息工程国际学术会议(IACIPIE2024)

2024图像处理分析与信息工程国际学术会议(IACIPIE2024) 会议简介 2024图像处理分析与信息工程国际学术会议&#xff08;IACIPIE2024&#xff09;将在中国长沙举行。 IACIPIE2024是一个年度会议&#xff0c;探讨图像处理分析和信息工程相关领域的发展和影响&#xff0c;旨在介…

Windows已经安装了QT 6.3.0,如何再安装一个QT 5.12

要在Windows上安装Qt 5.12&#xff0c;您可以按照以下步骤操作&#xff1a; 下载Qt 5.12&#xff1a;访问Qt官方网站或其他可信赖的来源&#xff0c;下载Qt 5.12的安装包。 下载安装地址 下载安装详细教程 安装问题点 qt安装时“Error during installation process(qt.tools…

MySQL集群 双主架构(配置命令)

CSDN 成就一亿技术人&#xff01; 今天刚开学第一天给大家分享一期&#xff1a;MySQL集群双主的配置需求和命令 CSDN 成就一亿技术人&#xff01; 神秘泣男子主页&#xff1a;作者首页 <———— MySQL专栏 &#xff1a;MySQL数据库专栏<———— MySQL双主是一…

SQL-Labs靶场“29-31”关通关教程

君衍. 一、二十九关 基于错误的WAF单引号注入1、源码分析2、HTTP参数污染3、联合查询注入4、updatexml报错注入 二、三十关 基于错误的WAF双引号注入1、源码分析2、联合查询注入3、updatexml报错注入 三、三十一关 基于错误的WAF双引号括号注入1、源码分析2、联合查询注入3、up…

STM32--低功耗模式详解

一、PWR简介 正常模式与睡眠模式耗电是mA级&#xff0c;停机模式与待机模式是uA级。 二、电源框图 供电区域有三处&#xff0c;分别是模拟部分供电&#xff08;VDDA&#xff09;&#xff0c;数字部分供电&#xff0c;包括VDD供电区域和1.8V供电区域&#xff0c;后备供电&…