【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. 总结

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


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

WEB服务器-Tomcat(黑马学习笔记)

简介 服务器概述 服务器硬件 ● 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求&#xff0c;并进行处理&#xff0c;因此一般来说服务器应具备承担服务并且保障…

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文: 1.C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 c…

【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现

1&#xff0c;视频地址 【wails】&#xff08;4&#xff09;&#xff1a;使用wails做桌面应用开发&#xff0c;整合chatgpt-web项目做前端&#xff0c;进行本地开发&#xff0c;web端也可以连调&#xff0c;使用websocket实现 2&#xff0c;演示效果 启动先是报500 错误&#…

最新 WebStorm 2023.3.4 激活

Stage 1 : 官网下载 Stage 2 : 下载工具 Stage 3-1 : windows为例 Stage 3-2 : mac为例 常见问题 Stage 1 : 官网下载 先去官网下载 Thank you for downloading WebStorm! 我这里下载的是最新版本的2023.3.4&#xff0c;测试过2023最新版本以及2022版本以上的版本没问题…

成为一名优秀的项目经理需要哪些技能?

成为一名优秀的项目管理专员需要具备以下技能和素质&#xff1a; 1. **沟通能力**&#xff1a;项目管理专员需要与团队成员、利益相关者、客户等进行有效沟通。这包括书面和口头沟通&#xff0c;确保信息的准确传达和理解。 2. **组织能力**&#xff1a;管理项目涉及许多任务和…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

[面试]我们常说的负载均衡是什么东西?

什么是负载均衡 如果用户量很多, 服务器的流量也随之增大, 此时出现两个问题, 软件性能下降 容易出现单点故障 为了解决这些问题, 引入了集群化架构, 也就是把一个软件同时部署在多个服务器上 集群化架构出现的问题 架构改变后又出现了两个问题 如何将请求均匀的发送到多…

Vue源码系列讲解——生命周期篇【七】(模板编译阶段)

目录 1. 前言 2. 模板编译阶段分析 2.1 两种$mount方法对比 2.2 完整版的vm.$mount方法分析 3. 总结 1. 前言 前几篇文章中我们介绍了生命周期的初始化阶段&#xff0c;我们知道&#xff0c;在初始化阶段各项工作做完之后调用了vm.$mount方法&#xff0c;该方法的调用标志…

一款.NET下 WPF UI框架介绍

WPF开源的UI框架有很多,如HandyControl、MahApps.Metro、Xceed Extended WPF Toolkit™、Modern UI for WPF (MUI)、Layui-WPF、MaterialDesignInXamlToolkit、等等,今天小编带大家认识一款比较常用的kaiyuanUI---WPF UI,这款ui框架美观现代化,用起来也超级方便, 界面展示…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题&#xff1f;比方说一个算法&#xff0c;它的 input 和 output 是什么&#xff1f;问题的条件是什么) 这篇文章提…

Nginx的核心配置指令及调优

目录 Nginx 核心配置指令 一、Nginx配置文件详解 1、配置文件目录 2、配置文件结构 二、调优 1、在全局域进行的调优 1.1线程池指令 1.2 工作进程数指令 1.3工作进程优先级指令 1.4 工作进程 CPU 绑定指令 1.5 调试可打开的文件个数 1.6 调试文件大小指令 1.7 只运…

【Docker】03 容器操作

文章目录 一、流转图二、基本操作2.1 查看本地容器进程2.2 启动容器2.2.1 交互式启动容器2.2.2 后台启动容器 2.3 进入容器2.4 停止启动重启容器2.5 退出容器2.6 删除容器2.7 提交容器&#xff08;打包成镜像&#xff09;2.8 拷贝文件2.8.1 拷贝容器内文件到宿主机2.8.2 拷贝宿…

2024.2.29 模拟实现 RabbitMQ —— 项目展示

目录 项目介绍 核心功能 核心技术 演示直接交换机 演示扇出交换机 演示主题交换机 项目介绍 此处我们模拟 RabbitMQ 实现了一个消息队列服务器 核心功能 提供了 虚拟主机、交换机、队列、绑定、消息 概念的管理九大核心 API 创建队列、销毁队列、创建交换机、销毁交换机、…

react useMemo 用法

1&#xff0c;useCallback 的功能完全可以由 useMemo 所取代&#xff0c;如果你想通过使用 useMemo 返回一个记忆函数也是完全可以的。 usecallback(fn,inputs)is equivalent to useMemo(()> fn, inputs). 区别是:useCallback不会执行第一个参数函数&#xff0c;而是将它返…

自定义Chrome的浏览器开发者工具DevTools界面的字体和样式

Chrome浏览器开发者工具默认的字体太小&#xff0c;想要修改但没有相关设置。 外观——字体可以自定义字体&#xff0c;但大小不可以调整。 github上有人给出了方法 整理为中文教程&#xff1a; 1.打开浏览器开发者工具&#xff0c;点开设置——实验&#xff0c;勾上红框设…

网络技术ensp 一个简单的交换机配置案例

由于工作调岗&#xff0c;转战网络运维了&#xff0c;第一次网络笔记 1.&#xff0c;目的&#xff1a;2台主机相互可以ping通&#xff0c;并且可以ping通网关地址&#xff0c;设备&#xff1a;2台主机&#xff0c;2台交换机 2网络拓扑图如下 3.主机pc1的配置信息 ip&#xff…

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效?

轻量级模型&#xff0c;重量级性能&#xff0c;TinyLlama、LiteLlama小模型火起来了&#xff0c;针对特定领域较小的语言模型是否与较大的模型同样有效? 当大家都在研究大模型&#xff08;LLM&#xff09;参数规模达到百亿甚至千亿级别的同时&#xff0c;小巧且兼具高性能的小…

Springboot应用执行器Actuator源码分析

文章目录 一、认识Actuator1、回顾Actuator2、Actuator重要端点 二、源码分析1、Endpoint自动装配&#xff08;1&#xff09;自动配置入口&#xff08;2&#xff09;普通Endpoint自动装配&#xff08;3&#xff09;配置Web - Endpoint&#xff08;4&#xff09;注册Endpoint为M…