Linux-信号概念

1. 什么是信号

        信号本质是一种通知机制,用户or操作系统通过发送信号通知进程,进程进行后续处理

        在日常生活中就有很多例子,比如打游戏方面王者荣耀的“进攻”,“撤退”,“请求集合”,“干得漂亮!”.......这些就是信号,用来通知队友,传递某种信息,并采取行动。

信号主要具有以下特点

  • 进程必须具有 “识别” 的能力(认识+后续动作)
  • 进程能够 “识别” 是程序员赋予的
  • 信号的产生是随机的,可能在任意时间
  • 信号被识别后可能不会立即处理
  • 进程会临时记录信号,方便后续处理
  • 至于在什么时候处理,合适的时候(还在写)
  • 信号的产生相对于进程是异步的

2. 信号怎么产生的

信号的产生方式有四种:

  1. 键盘(ctrl+c)
  2. 系统调用接口(kill命令)
  3. 软件异常(闹钟)
  4. 硬件异常(除0错误,野指针)

        或是命令或是异常错误,最终都是由OS接收到这些指令或者识别到某些错误,进而向进程PCB(task_struct)发送信号

kill -l

查看信号的种类 

         Linux一共有62种信号(没有32,33),其中 [1, 31] 是普通信号,[33, 64] 是实时信号,这里主要介绍普通信号

        (这一块具体内容放在下一篇博客)

3. 信号处理方式

信号的处理方式有以下三种:

  1. 默认(进程自带,程序员写好了)
  2. 忽略
  3. 自定义捕捉

        其中在< signal.h >头文件下定义了以SIG开头的一系列宏,对应信号的编号 

        并且typedef了一个函数指针类型sighandler参数为int返回值为void

        分别对应着错误,默认,和忽略

 signal函数介绍:

函数作用:

        自定义信号处理方式,以达到信号捕捉。通过函数回调的方式,修改对应的信号的处理动作。

参数:

        signum,修改的信号编号,可以传SIGINT,也可以传2

        handler,函数的地址,实现一个函数,作为信号的处理动作

        void handler(int args);调用时signum会作为args传入

返回值:不重要

        当一个信号的处理方式是默认,那么信号会根据下面这张表格处理

Team终止
Ign忽略
Core

终止 + 核心转储

Stop暂停
Cont继续

        当一个信号的处理方式是忽略,则什么都不会发生

        当一个信号的处理方式是自定义,会按照自定义的方式执行自定义的函数(如signal函数的handler)


拓展:

Core Dump(核心转储):当进程出现某种异常,OS会把进程在内存中的核心相关数据转存到磁盘上,在当前目录下生成core.pid的文件。目的是为了方便调试

        在我们之前的学习中,父进程等待子进程退出,status中

        标志位为1标识发生核心转储,反之没有 

如何利用core文件调试:

  1. 条件:当前生产环境打开core dump功能,并且程序在编译时-g了(Debug模式),进程发生了核心转储
  2. gdb 运行
  3. core-file core.pid(core文件)

        就可以定位到出错位置

注意:一般而言,在云服务器上,core dump一般是关闭的,因为如果一直核心转储会消耗大量空间,打开只需要, ulimit -a 查看 ; ulimit -c 10240(你认为合适的大小)0 是关闭


4. 信号的发送的本质

        进程如何保存信号,其实在进程PCB(task_struct)中有一个位图(Bitmap)来标识信号是否产生,如果产生就标1,没有就标0

        (关于信号保存,会在后面的博客具体谈)

        信号发送的本质就是,OS向目标进程写信号,修改PCB中的指定位图结构

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

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

相关文章

【一步一步了解Java系列】:探索Java基本类型转换的秘密

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹。 如果喜欢能否点个赞支持一下&#…

第四百九十二回

文章目录 1. 概念介绍2. 使用方法2.1 SegmentedButton2.2 ButtonSegment 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"SearchBar组件"相关的内容&#xff0c;本章回中将介绍SegmentedButton组件.闲话休提&#xff0c;让我们一起Talk …

Java面试题:多线程3

CAS Compare and Swap(比较再交换) 体现了一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性. 线程A和线程B对主内存中的变量c同时进行修改 在线程A中存在预期值a,修改后的更新值a1 在线程B中存在预期值b,修改后的更新值b1 当且仅当预期值和主内存中的变量值相等…

Llama3-Tutorial之XTuner微调Llama3个人小助手

Llama3-Tutorial之XTuner微调Llama3个人小助手 使用XTuner微调llama3模型。 参考&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 1. web demo部署 参考上一节内容已经完成web demo部署&#xff0c;进行对话测试, 当前回答基于llama3官方发布的模型进行推理生成&…

MySQL基础_5.多表查询

文章目录 一、多表连接1.1、笛卡尔积&#xff08;或交叉连接&#xff09; 二、多表查询&#xff08;SQL99语法&#xff09;2.1、内连接(INNER JOIN)2.2、内连接(INNER JOIN) 一、多表连接 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。 …

利用matplotlib和networkx绘制有向图[显示边的权重]

使用Python中的matplotlib和networkx库来绘制一个有向图&#xff0c;并显示边的权重标签。 1. 定义了节点和边&#xff1a;节点是一个包含5个节点的列表&#xff0c;边是一个包含各个边以及它们的权重的列表。 2. 创建了一个有向图对象 G。 3. 向图中添加节点和边。 4. 设置了…

Sarcasm detection论文解析 |基于情感背景和个人表达习惯的有效讽刺检测方法

论文地址 论文地址&#xff1a;https://link.springer.com/article/10.1007/s12559-021-09832-x#/ 论文首页 笔记框架 基于情感背景和个人表达习惯的有效讽刺检测方法 &#x1f4c5;出版年份:2022 &#x1f4d6;出版期刊:Cognitive Computation &#x1f4c8;影响因子:5.4 &…

光检测器——光纤通信学习笔记七

光检测器 光检测器的基本介绍 作用&#xff1a;把接受到的光信号转换成电信号 光接收器的灵敏度、光源的发光功率和光纤的损耗三者决定了光纤通信的传输距离&#xff1b; 光电二极管 光电转换的基本原理 之前提到&#xff0c;PN结由于内部载流子的扩散运动形成了内部电场&…

[Java EE] 多线程(八):CAS问题与JUC包

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (90平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

华为 二层交换机与防火墙连通上网实验

防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量。它可以帮助防止未经授权的访问&#xff0c;保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量&#xff0c;例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

git与gitlab

目录 gitlab 下载与安装 重置管理员密码 gitlab命令 git远程gitlab相关命令 认证 补充 git git 分布式版本控制 安装 git的四个区域与文件的四个状态 使用git 常用命令 git 分布式管理系统 gitlab 企业私有库 github 公网共享库&#xff0c;全球…

hinge loss(损失函数)

Devise模型中用到hinge loss和相似性度量相结合计算损失&#xff0c;其损失如下&#xff1a; 举例说明该损失如何计算 运用公式2&#xff1a;&#xff08;常用公式2&#xff09;Devise模型用到的是公式2 参考&#xff1a;https://blog.csdn.net/weixin_43055882/article/det…

Java新手必看:快速上手FileOutPutStream类

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

OpenHarmony实战开发-应用侧调用前端页面函数

应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。 在下面的示例中&#xff0c;点击应用侧的“runJavaScript”按钮时&#xff0c;来触发前端页面的htmlTest()方法。 前端页面代码。 <!-- index.html --> <!DOCTYPE html> <html> <…

58行代码把Llama 3扩展到100万上下文,任何微调版都适用 | 最新快讯

量子位公众号 QbitAI 堂堂开源之王 Llama 3&#xff0c;原版上下文窗口居然只有……8k&#xff0c;让到嘴边的一句“真香”又咽回去了。 在 32k 起步&#xff0c;100k 寻常的今天&#xff0c;这是故意要给开源社区留做贡献的空间吗&#xff1f; 开源社区当然不会放过这个机会&a…

Llama3-Tutorial之LMDeploy高效部署Llama3实践

Llama3-Tutorial之LMDeploy高效部署Llama3实践 Llama 3 近期重磅发布&#xff0c;发布了 8B 和 70B 参数量的模型&#xff0c;lmdeploy团队对 Llama 3 部署进行了光速支持&#xff01;&#xff01;&#xff01; 书生浦语和机智流社区同学光速投稿了 LMDeploy 高效量化部署 Llam…

对于子数组问题的动态规划

前言 先讲讲我对于这个问题的理解吧 当谈到解决子数组问题时&#xff0c;动态规划(DP)是一个强大的工具&#xff0c;它在处理各种算法挑战时发挥着重要作用。动态规划是一种思想&#xff0c;它通过将问题分解成更小的子问题并以一种递归的方式解决它们&#xff0c;然后利用这些…

【华为】IPSec VPN手动配置

【华为】IPSec VPN手动配置 拓扑配置ISP - 2AR1NAT - Easy IPIPSec VPN AR3NATIPsec VPN PC检验 配置文档AR1AR2 拓扑 配置 配置步骤 1、配置IP地址&#xff0c;ISP 路由器用 Lo0 模拟互联网 2、漳州和福州两个出口路由器配置默认路由指向ISP路由器 3、进行 IPsec VPN配置&…

Redission分布式锁 watch dog 看门狗机制

为了避免Redis实现的分布式锁超时&#xff0c;Redisson中引入了watch dog的机制&#xff0c;他可以帮助我们在Redisson实例被关闭前&#xff0c;不断的延长锁的有效期。 自动续租&#xff1a;当一个Redisson客户端实例获取到一个分布式锁时&#xff0c;如果没有指定锁的超时时…

笔记86:关于【#ifndef + #define + #endif】的用法

当你在编写一个头文件&#xff08;例如 pid_controller.h&#xff09;时&#xff0c;你可能会在多个源文件中包含它&#xff0c;以便在这些源文件中使用该头文件定义的函数、类或其他声明。如果你在多个源文件中都包含了同一个头文件&#xff0c;那么当你将整个工程统一编译&am…