当前位置: 首页 > news >正文

进程信号的产生与处理

目录

前言

一.信号的概念

二.信号的产生

1.键盘产生

2.系统调用

3.软件条件

4.异常

三.信号的保存

四.信号的处理

信号处理的方式

设定屏蔽信号

自定义处理信号

信号处理的时机


前言

        进程信号(Process Signals)是操作系统与运行进程之间进行通信的一种机制。信号通常用于通知进程发生了某些事件,如异常情况、硬件事件、系统调用的错误或用户发出的中断请求。信号的处理方式与异常处理类似,它允许进程在接收到信号时,暂时中断当前的执行流程,以处理特定的事件,  学习进程的信号有利于我们理解程序的运行情况

一.信号的概念

信号是Linu×系统提供让用户(进程)给其他进程发送异步信息的一种方式,属于软中断

进程在接收到信号时,暂时中断当前的执行流程,以处理特定的事件

使用kill -l 命令查看全部信号

[1,31]信号是非实时信号,  进程收到信号后选择在合适的时间处理

[34,64]信号是实时信号,  进程收到信号后需要马上处理

这些信号也是一个个宏定义,

#define	SIGINT		2	/* Interactive attention signal.  */
#define	SIGILL		4	/* Illegal instruction.  */
#define	SIGABRT		6	/* Abnormal termination.  */
#define	SIGFPE		8	/* Erroneous arithmetic operation.  */
#define	SIGSEGV		11	/* Invalid access to storage.  */
#define	SIGTERM		15	/* Termination request.  *//* Historical signals specified by POSIX. */
#define	SIGHUP		1	/* Hangup.  */
#define	SIGQUIT		3	/* Quit.  */
#define	SIGTRAP		5	/* Trace/breakpoint trap.  */
#define	SIGKILL		9	/* Killed.  */
#define SIGBUS		10	/* Bus error.  */
#define	SIGSYS		12	/* Bad system call.  */
#define	SIGPIPE		13	/* Broken pipe.  */
#define	SIGALRM		14	/* Alarm clock.  */

二.信号的产生

1.键盘产生

        比如程序在前台运行的时候,  我们中止这个进程会直接ctrl+c,  或者ctrl+/,  这些都会被识别为信号处理Ctrl+c 会被识别为SIGINT,  Ctrl+/会被识别为SIGQUIT

        使用键盘输入的时候,  键盘控制器(通常是PS/2或USB控制器)会生成一个硬件中断信号。这个信号会通过系统总线传递给CPU  触发硬件中断,  CPU就会去中断向量表中执行对应的方法,  读取键盘输入,  最后判断键盘输入,  如果解释为字符就进行写入,  如果解释为信号就向对应的进程写入信号

2.系统调用

使用系统调用发送信号

向一个指定进程发送信号

向自己发送指定信号

向自己发送SIGABRT(6)信号

3.软件条件

比如这个是一个闹钟

设定闹钟,时间到了向自己发SIGALRM(14)信号

如果闹钟已经设定,  则返回上个闹钟的剩余时间

4.异常

比如

SIGFPE(8) 浮点数错误

SIGSEGV(11) 段错误

cpu在计算的是否如果出现异常,  就会对自己发生硬件中断,  使得操作系统来处理这些异常,  

比如发生除0错误,  cpu计算错误,  寄存器里有状态标识寄存器,  OS识别到这个标记就会执行相对应的方法操作系统就会给该进程写入SIGFPE信号

发生越界访问就会写入SIGSEGV信号

三.信号的保存

信号保存在进程的PCB中,  采用位图结构保存,  所谓发送信号就是OS向进程的PCB写入信号

  • 实际执行信号的处理动作称为信号递达(Delivery)
  • 信号从产生到递达之间的状态,称为信号未决(Pending)
  • 进程可以选择阻塞 (Block )某个信号。
  • 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作.
  • 注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。

进程收到的信号会被保存在pending表,  如果接收到这个信号,  就置为1

block表表示这个信号是否被忽略

handler表示这个信号处理的动作

四.信号的处理

信号处理的方式

1.默认处理

2.自定义处理

3.忽略

使用 man 7 signal来查看信号的默认处理

Term   直接中止进程
Ign    不做处理
Core   核心转储
Stop   暂停进程
Cont   如果该进程当前已暂停,则继续该进程.

设定屏蔽信号

信号集操作函数

设置信号屏蔽

how常用选项

  • SIGBLOCK:  表示要添加忽略处理的信号
  • SIGUNBLOCK:  表示将这些信移出block表
  • SIGSETMASK:  表示直接将屏蔽信号修改为传入的信号集

可以使用sigpending获得pending表

自定义处理信号

对指定信号自定义处理

handler:  一个函数指针,   表示要执行的自定义函数

比如将SIGINT信号自定义处理

#include<iostream>
#include<signal.h>
void handler(int sig)
{//自定义处理
}int main()
{signal(SIGINT,handler);return 0;
}

之后进程收到这个信号就会直接执行handler函数

如果需要忽略这个信号

signal(SIGINT,SIG_IGN);

信号处理的时机

进程从内核态切换到用户态的时候OS会检测处理信号

相关文章:

进程信号的产生与处理

目录 前言 一.信号的概念 二.信号的产生 1.键盘产生 2.系统调用 3.软件条件 4.异常 三.信号的保存 四.信号的处理 信号处理的方式 设定屏蔽信号 自定义处理信号 信号处理的时机 前言 进程信号&#xff08;Process Signals&#xff09;是操作系统与运行进程之间进行通…...

统一响应结果封装,Result类的实现【后端 06】

统一响应结果封装&#xff0c;Result类的实现 在开发Web应用或API接口时&#xff0c;如何优雅地处理并返回响应结果是每个开发者都需要考虑的问题。统一响应结果封装&#xff08;Unified Response Encapsulation&#xff09;作为一种广泛采用的实践&#xff0c;不仅提高了API的…...

明日周刊-第20期

本周异形新电影上映&#xff0c;开始期待起来了&#xff0c;毕竟这是一个经久不衰的ip。还有就是马上来临的黑神话悟空&#xff0c;属于我们自己的3A大作&#xff0c;接下去的每一天都是新的期待。 文章目录 科技短讯资源分享随便说说一点心情 科技短讯 科技创新与突破 人工智…...

深入剖析 Spring 常用注解:功能与差异的全景洞察

《深入剖析 Spring 常用注解&#xff1a;功能与差异的全景洞察》 在当今的 Java 开发领域&#xff0c;Spring 框架无疑是最广泛使用的框架之一。而在 Spring 中&#xff0c;注解的运用极大地简化了开发流程&#xff0c;提高了代码的可读性和可维护性。本文将深入探讨 Spring 中…...

【隐私计算篇】隐私计算使用不当也会泄露原始数据

1. 背景信息 有个有趣的问题&#xff0c;刚好最近有讨论到&#xff0c;在这里也抛一下&#xff0c;就是隐私计算中我们经常谈到主流的一些技术&#xff0c;比如联邦学习、多方安全计算、安全求交、匿踪查询、可信执行环境等&#xff0c;然后笼统地会称这些技术实现了对隐私…...

C++第一讲:开篇

C第一讲&#xff1a;开篇 1.C历史背景1.1C创世主--本贾尼1.2C版本更新1.3C的重要性1.4C书籍推荐 2.C的第一个程序3.命名空间3.1namespace是什么3.2namespace的使用3.3namespace使用注意事项3.4命名空间的使用 4.C输入和输出5.缺省参数6.函数重载7.引用7.1什么是引用7.2引用的定…...

OceanBase V4.2特性解析:MySQL模式下GIS空间表达式的场景及能力解析

1. 背景 1.1. OceanBase Mysql gis空间表达式的应用场景及能力 在OceanBase 4.1版本中&#xff0c;mysql模式下支持了gis数据类型以及部分空间对象相关的表达式&#xff0c;随着客户使用空间数据的需求日益增长&#xff0c;需要快速地补齐空间数据存储和计算分析的能力&#…...

HSL模型和HSB模型,和懒人配色的Color Hunt

色彩不仅仅是视觉上的享受&#xff0c;它在数据可视化中也扮演着关键角色。通过合理运用色彩模型&#xff0c;我们可以使数据更具可读性和解释性。在这篇文章将探讨HSL&#xff08;Hue, Saturation, Lightness&#xff09;和HSB&#xff08;Hue, Saturation, Brightness&#x…...

什么是云原生?(二)

1. 云原生的定义 云原生指构建和运行应用以充分利用通过云技术交付模式交付的分布式计算。云原生应用旨在充分利用云技术平台特有的可扩展性、弹性和灵活性优势。 根据云原生计算基金会 (CNCF) 的定义&#xff0c;云原生技术可帮助企业在公有云、私有云和混合云环境中构建和…...

pytorch 47 模型剪枝实战|基于torch-pruning库代码对yolov10n模型进行剪枝

torch-pruning官方提供了基于yolov8的剪枝代码,基于此代码改进博主实现了对yolov10n模型的剪枝。虽然实现了对yolov10n模型的剪枝,剪枝目标为移除60%的通道,然而实验是失败的,针对coco数据集进行操作,剪枝前的模型map时37,剪枝后只能恢复到22,比预计下降了15个点,剪枝后…...

LeetCode_sql_day15(262.行程与用户)

描述&#xff1a;262. 行程和用户 - 力扣&#xff08;LeetCode&#xff09; 取消率 的计算方式如下&#xff1a;(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)。 编写解决方案找出 "2013-10-01" 至 "2013-10-03" 期间非禁止…...

【MySQL】详解数据库约束、聚合查询和联合查询

数据库约束 约束类型 数据库的约束类型主要包括以下几种&#xff1a; 主键约束&#xff08;Primary Key Constraint&#xff09;&#xff1a;确保表中的每一行都有唯一的标识&#xff0c;且不能为NULL。 外键约束&#xff08;Foreign Key Constraint&#xff09;&#xff1a…...

bug积累

1.只写 int p[len1 len2]; 时&#xff0c;实际上是在使用 C99 标准中引入的变长数组&#xff08;VLA, Variable Length Array&#xff09;的特性。变长数组允许在栈上分配其大小在运行时确定的数组。这意味着 len1 和 len2 的值可以在程序运行时确定&#xff0c;但仍然可以用来…...

版本控制案例:全球虚拟制片领导者Dimension借助Perforce Helix Core简化多供应商协作,控制访问权限,确保数据资产安全(下)

创建虚拟世界和人物角色需要一系列的软件工具。但最终愿景很少是由单一工作室独立完成的。对于大型项目&#xff0c;工作室需要通力合作&#xff0c;将全球的团队成员和数字资产联合起来。 Dimension Studio——体积内容捕捉和虚拟制片领域的领导者——不断将新技术和新方法融…...

Anaconda配置envs和pcks路径

问题 原先Anaconda安装在C盘&#xff0c;安装很多包后只剩几个G了&#xff0c;为了给C盘腾空间&#xff0c;卸载后重新安装在了D盘&#xff0c;但是创建了新环境后发现环境位置依旧在C盘&#xff0c;安装新的包仍然会占用C盘空间。 解决办法 查看conda的配置信息 执行如下命…...

推荐10个在线搭建框架平台

前言 在开发项目的时候&#xff0c;首先就是要搭建一个框架。这个框架可以是纯技术框架&#xff0c;也可以具备一定功能的开源框架。但是在搭建框架的时候&#xff0c;版本的冲突&#xff0c;环境的配置等是新手们一直头痛的问题&#xff0c;在构建开源框架的时候&#xff0c;…...

Linux Shell--函数

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、简介 Shell 函数是一段可以重复使用的代码块&#xff0c;通过定义函数可以避免代码重复&#xff0c;提高脚本的可读性和可维护性。 二、定义函数…...

漏洞复现-CVE-2023-42442:JumpServer未授权访问漏洞

概述 JumpServer存在一个未授权访问漏洞。具体来说&#xff0c;/api/v1/terminal/sessions/ API端点的权限控制存在逻辑错误&#xff0c;允许攻击者匿名访问。未经身份验证的远程攻击者可以利用此漏洞下载SSH日志&#xff0c;并可能借此远程窃取敏感信息。值得注意的是&#x…...

【数据结构之带头双向循环链表的实现】

1.链表的分类 链表的结构有多种多样&#xff0c;以下情况组合起来就有8种&#xff08;2x2x2&#xff09;链表结构&#xff1a; 虽然有这么多的链表结构&#xff0c;但是我们实际中最常用的还是两种结构&#xff1a;单链表和双向带头循环链表。 无头单向非循环链表&#xff1a;结…...

【docker】docker数据卷与网络部署服务

Docker 网络模式 选择网络模式 Host Mode (主机模式) 特点: 容器与宿主机共享网络命名空间操作: docker run --nethost ... Container Mode (容器模式) 特点: 容器与指定容器共享网络命名空间操作: docker run --netcontainer:<container-id-or-name> ... None Mode (无…...

别再为Cloudflare Turnstile头疼了!用Python+Playwright-stealth保姆级配置,5分钟搞定验证码

5分钟攻克Cloudflare Turnstile&#xff1a;PythonPlaywright-stealth实战指南 当你兴致勃勃地准备抓取某个网站数据时&#xff0c;突然跳出的Cloudflare Turnstile验证页面就像一盆冷水浇下来。这种看似简单的验证机制背后&#xff0c;是Cloudflare精心设计的浏览器指纹识别和…...

保姆级教程:用Node.js搭建WebSocket中继,让ESP32-CAM视频在另一块ESP32屏幕上实时播放

从零构建ESP32-CAM视频中继系统&#xff1a;WebSocket与Node.js的深度实践 想象一下这样的场景&#xff1a;工厂里的巡检机器人通过摄像头捕捉设备状态&#xff0c;实时传输到工程师的监控屏幕&#xff1b;或是智能家居中的安防摄像头&#xff0c;将画面无缝推送到多个终端。这…...

颠覆式窗口控制:WindowResizer革命性尺寸调整技术全解析

颠覆式窗口控制&#xff1a;WindowResizer革命性尺寸调整技术全解析 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer WindowResizer——这款开源窗口尺寸控制工具&#xff0c;正以革…...

Mem Reduct内存管理实战指南:从问题诊断到系统优化

Mem Reduct内存管理实战指南&#xff1a;从问题诊断到系统优化 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 在现代…...

5大核心功能驱动管理工具:DriverStore Explorer高效清理与深度优化指南

5大核心功能驱动管理工具&#xff1a;DriverStore Explorer高效清理与深度优化指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer DriverStore Explorer&#xff08;RAPR&#xff09;是…...

忍者像素绘卷:天界画坊卷积神经网络原理与应用:解析像素风格生成内核

忍者像素绘卷&#xff1a;天界画坊卷积神经网络原理与应用 1. 卷积神经网络基础入门 在开始探索忍者像素绘卷的神奇世界之前&#xff0c;我们需要先了解支撑它的核心技术——卷积神经网络(CNN)。CNN就像一位精通像素艺术的数字画家&#xff0c;能够从原始图像中提取特征&…...

OneAPI开源大模型网关部署:支持国产数据库(达梦/人大金仓)存储用户与渠道数据

OneAPI开源大模型网关部署&#xff1a;支持国产数据库&#xff08;达梦/人大金仓&#xff09;存储用户与渠道数据 1. 引言&#xff1a;为什么你需要一个统一的大模型网关&#xff1f; 如果你正在使用或者计划使用大模型&#xff0c;大概率会遇到这样的烦恼&#xff1a;每个厂…...

避坑指南:OpenClaw接入百川2-13B-4bits量化模型常见报错大全

避坑指南&#xff1a;OpenClaw接入百川2-13B-4bits量化模型常见报错大全 1. 为什么选择百川2-13B-4bits量化模型 去年我在搭建个人知识管理自动化系统时&#xff0c;第一次尝试将OpenClaw接入本地部署的大模型。当时显存只有12GB的RTX 3060让我在模型选择上捉襟见肘&#xff…...

s2-pro开源TTS价值:填补中文专业级开源语音合成模型空白

s2-pro开源TTS价值&#xff1a;填补中文专业级开源语音合成模型空白 1. 为什么我们需要专业级中文TTS 在语音技术领域&#xff0c;中文语音合成(TTS)长期面临一个尴尬局面&#xff1a;虽然商业解决方案众多&#xff0c;但高质量的开源模型却寥寥无几。这种状况直到s2-pro的出…...

OpenClaw可视化监控:千问3.5-9B任务实时看板搭建

OpenClaw可视化监控&#xff1a;千问3.5-9B任务实时看板搭建 1. 为什么需要本地可视化监控&#xff1f; 上个月我尝试用OpenClaw自动化处理一批市场分析报告时&#xff0c;突然发现任务执行到一半就中断了。排查了半天才发现是Token耗尽导致模型停止响应——这种"黑盒式…...