linux 应用开发笔记---【信号:基础】
1.基本概念
信号是发生事件时对进程的通知机制,也可以称为软件中断
信号的目的是用来通信的
1.硬件发生异常,将错误信息通知给内核,然后内核将相关的信号给相关的进程
2.在终端输入特殊字符产生特殊信号
3.进程调用kill()将任意信号发送给另一个进程或者进程组
4.发生了软件事件,借助软件触发条件,去进行通知
信号的分类:
1.忽略信号:进程直接不理会信号,除了SIGKILL 和 SIGSTOP
2.捕获信号:当信号达到进程后,执行预先绑定的信号处理函数【插一嘴,这不是就是pyqt5的信号与槽函数】,linux提供了signal()系统调用用于注册信号的处理函数
3. 执行系统的默认操作,进程不进行处理转而让系统进行处理
信号是异步的:
当产生了中断事件,然后告知程序,然后打断当前程序的正常执行流程,跳转去执行中断服务函数
信号的本质是int类型数字编号,从1开始
2.信号的分类
1.可靠信号和不可靠信号
不可靠信号(1-31) 可靠信号(32-64)

2.实时信号和非实时信号
非实时信号不支持排队,都是不可靠信号-----【标准信号】
实时信号支持排队,是可靠信号
3.进程对信号的处理
1.signal()函数
sig_t signal(int signum, sig_t handler);signum:此参数指定需要进行设置的信号handler:sig_t 类型的函数指针,指向信号对应的信号处理函数,当进程接收到信号后会自动执行该处
理函数
2.sigaction()函数
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);signum:需要设置的信号,除了 SIGKILL 信号和 SIGSTOP 信号之外的任何信号act:描述了信号的处理方式,如果参数 act 为 NULL,则表示无需改变信号当前的处理方式oldact:如果参数oldact 不为 NULL,则会将信号之前的处理方式等信息通过参数 oldact 返回出来
4.向进程发送信号
一个进程可通过kill()向另一个进程发送信号
int kill(pid_t pid, int sig);pid:参数 pid 为正数的情况下,用于指定接收此信号的进程 pidsig:参数 sig 指定需要发送的信号,也可设置为 0,如果参数 sig 设置为 0 则表示不发送信号,但任执
行错误检查,这通常可用于检查参数 pid 指定的进程是否存在。
kill()系统调用可将信号发送给指定的进程或者进程组中的每一个进程

发送进程的权限:
超级用户root: 进程可以将信号发送给任何进程
普通用户: 发送者进程的实际用户 ID 或有效用户 ID 必须等于接收者进程的实际用户 ID 或有效用户 ID
raise()
int raise(int sig);sig : 需要发送的信号
alarm()和pause()函数
unsigned int alarm(unsigned int seconds);设置定时器,当定时器时间到达的时候,内核会向进程发送SIGALR信号,只能触发一次int pause(void);pause()系统调用可以使得进程暂停运行、进入休眠状态,直到进程捕获到一个信号为止,只有执行了信
号处理函数并从其返回时,pause()才返回,在这种情况下,pause()返回-1,并且将 errno 设置为 EINTR
5.信号集
定义:一个可以表达多个信号(一组信号)的数据类型
初始化信号集:
int sigemptyset(sigset_t *set);sigemptyset()初始化信号集,使其不包含任何信号int sigfillset(sigset_t *set);sigfillset()函数初始化信号集,使其包含所有信号(包括所有实时信号)
信号集添加/删除信号:
sigset_t *set: 信号集signum:信号int sigaddset(sigset_t *set, int signum);int sigdelset(sigset_t *set, int signum);
测试信号是否在信号集
int sigismember(const sigset_t *set, int signum);在:返回 1
不在:返回0
获取信号的描述信息
char *strsignal(int sig);
void psignal(int sig, const char *s);![]()
信号掩码(阻塞信号传递)
处在信号掩码的信号会被阻塞,无法传递给进程进行处理,内核会将其阻塞,直到该信号从信号掩码中移除,内核才会把信号传递给进程从而进行处理
阻塞等待信号sigsuspend():
作用:将恢复信号掩码和pause()挂起进程两个动作封装成一个原子操作
int sigsuspend(const sigset_t *mask);
实时信号:
int sigpending(sigset_t *set);set:处于等待状态的信号会存放在参数 set 所指向的信号集中 发送实时信号:
异常退出abort()函数
void abort(void); 正常终止进程:
1.main函数通过return 语句退出程序2.调用库函数exit()
3.系统调用终止进程,譬如exit(),_Exit()
异常终止进程:
1.被信号终止2.调用abort函数,SIGABRT
相关文章:
linux 应用开发笔记---【信号:基础】
1.基本概念 信号是发生事件时对进程的通知机制,也可以称为软件中断 信号的目的是用来通信的 1.硬件发生异常,将错误信息通知给内核,然后内核将相关的信号给相关的进程 2.在终端输入特殊字符产生特殊信号 3.进程调用kill()将任意信号发送…...
区块链:改变世界的技术
一、引言 区块链,这个曾经看似神秘且遥不可及的词语,如今已经深入人心,成为我们生活的一部分。它以其独特的去中心化、分布式、不可篡改的特性,正在改变我们的生活方式,甚至改变我们的思维方式。本文将深入浅出地解释…...
防御升级!SMC2助力企业高效应对邮箱安全挑战
根据Coremail邮件安全人工智能实验室(以下简称AI实验室)的监测数据显示,2023年Q3全国企业级用户遭受无差别的暴力破解攻击次数虽相比2022年同期有所下降,但仍高达 24.2 亿次,且暴力破解攻击次数有明显回升趋势。 面对正…...
19.(vue3.x+vite)v-if和v-for哪个优先级更高
前端技术社区总目录(订阅之前请先查看该博客) v-if和v-for哪个优先级更高 (1)实践中不应该把v-for和v-if放一起,可以包一层template (2)在vue2中,v-for的优先级是高于v-if (3)在vue3中,v-for的优先级是低于v-if 组件代码 <template><div><!--包一…...
12. IO
1.File类 • File 类代表与平台无关的文件和目录。 • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 1).File的常用方法 在这里插入图片描述 2).遍历给定目录所有文件 …...
【稳定检索|投稿优惠】2024年艺术鉴赏与社会科学教育国际会议(ICAASSE 2024)
2024年艺术鉴赏与社会科学教育国际会议(ICAASSE 2024) 2024 International Conference on Art Appreciation and Social Science Education(ICAASSE) 一、【会议简介】 2024年艺术鉴赏与社会科学教育国际会议(ICAASSE 2024),这场学术盛宴,将于2024年2月1…...
leetCode算法—3.无重复字符的最长子串
1.给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 …...
STM32 寄存器配置笔记——USART DMA接收
一、简介 本文主要介绍STM32如何配合USART的IDLE中断实现USART DMA接收不定长的数据。其中使用的接收缓存还是延用前面博客写的乒乓缓存。使用DMA USART接收来替代中断方式或轮询方式的接收主要是为了提高代码的运行效率,中断方式的接收,每接收一个字节便…...
(基础篇)通过node增删改查连接mysql数据库
一定要会最基础的sql建表一定要会最基础的sql建表一定要会最基础的sql建表 首先说一下准备工作 一、准备工具 1.mysql数据库Navicat可视化工具(数据库表单已经建好) 我这里用的小皮工具直接开启的本地mysql 2.vscode (不用说基本上都有) 3.node.js …...
做为一个产品经理带你详细了解--动态面板的使用
📚📚 🏅我是bing人,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Axure》。🎯🎯 🚀无论你是编程小白,还是有一…...
严世芸龟法养生经
文章目录 严世芸理念荤素搭配,不偏嗜动静结合心平气和 龟息法 严世芸 严世芸,出生于1940年,现任上海中医药大学的主任医师,教授。他父亲是近代上海有名的中医,他又是著名医家张伯臾的亲传弟子。 从小就在父亲诊室里长…...
基于OHTPPS实现网站HTTPS访问
前言 笔者近期为网站配置HTTPS的域名,查找了大量方案,最近寻得一个不错的解决方式,通过OHTTPS获取免费的证书并部署到阿里云服务器上。 步骤 到OHTTPS官网注册账号 官方地址如下,读者可以先行到官网注册一下账号,笔…...
python|获取接口请求耗时
你想知道我们请求一个url的时候,握手和请求资源分别占用多长时间么?今天我们使用python写个小案例来看看吧。 项目展示 打开项目,修改hosts、port、methods以及url的变量,即可运行python程序便可获得该页面的详细信息的时间&…...
[PyTorch][chapter 7][李宏毅深度学习][深度学习简介]
前言: 深度学习常用的开发平台 TensorFlow torch theano caffe DSSTNE mxnet libdnn CNTK 目录: 1: 深度学习发展历史 2: DeepLearning 工程简介 3: DNN 简介 一 发展历史 二 DeepLearning 工程简介 深度学习三…...
【go语言实践一】go语言基础篇一
go语言基础 一些go语言学习辅助地址go代码运行方法go run xxx.gogo build xxx.go go语言编码规范go语言的{}的写法强制 go语言注释 go语言变量定义多个全局变量的声明 go语言数据类型基本数据类型基本数据类型的转换(其他)基本数据类型转string1、使用fmt.Sprintf(…...
深度学习 Day12——P1实现mnist手写数字识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…...
【Docker实战】基于Dockerfile搭建LNMP+wordpress
一、项目背景和要求 公司在实际的生产环境中,需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。 然后对此服务进行相关的性能调优和管理工作 二、架构: nginx172.111.0.10docker-nginxmysql172.111.0.20docker-mysqlPHP172.111…...
【桌面应用开发】Tauri是什么?基于Rust的桌面应用
自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…...
PHP的协程是什么?
PHP 的协程是一种轻量级的线程(或任务)实现,允许在一个进程中同时执行多个协程,但在任意时刻只有一个协程处于执行状态。协程可以看作是一种用户空间线程,由程序员显式地管理,而不是由操作系统内核进行调度…...
three.js 入门三:buffergeometry贴图属性(position、index和uvs)
环境: three.js 0.159.0 一、基础知识 geometry:决定物体的几何形状、轮廓;material:决定物体呈现的色彩、光影特性、贴图皮肤;mesh:场景中的物体,由geometry和materia组成;textu…...
CloudBase-MCP:基于MCP协议桥接本地应用与云服务的实践指南
1. 项目概述:一个连接云与本地应用的“智能接线员”如果你正在开发一个应用,需要让它在本地服务器上运行,同时又想无缝地调用云上的各种能力——比如对象存储、数据库、AI模型或者消息队列,你会怎么做?传统的方式可能是…...
立体仓库WMS深度解析
立体仓库WMS深度解析📌 封面语:立体仓库失败案例中,80% 不是硬件问题,而是 WMS 和 WCS “对话” 失败。想避坑,先搞懂这套软件怎么运转。 ✍️ 作者:这是「物流自动化软件内参」WMS 深度解析系列的第一篇。…...
ARM PMUv3架构详解与性能监控实战
1. ARM PMUv3架构概述 性能监控单元(Performance Monitor Unit, PMU)是现代处理器中用于硬件性能分析的关键组件。作为ARMv8架构的标准组成部分,PMUv3通过事件计数器和配置寄存器实现了对微架构事件的监测能力。在实际开发中,我们经常需要利用PMU来定位性…...
别再只会显示字符了!用51单片机和OLED做个简易电子时钟(IIC协议详解)
从零构建51单片机OLED电子时钟:IIC协议深度解析与项目实战 在嵌入式开发领域,51单片机因其稳定性和易用性始终占据一席之地。当基础的点亮OLED屏幕、显示静态文字已经无法满足你的求知欲时,一个融合硬件协议、实时时钟和UI设计的电子时钟项目…...
ARM核心板在POCT设备开发中的选型与应用实战
1. 项目概述:ARM核心板如何重塑POCT设备开发在医疗设备这个对稳定性和可靠性要求近乎苛刻的领域,每一次技术选型都像是一次精密的手术,容不得半点闪失。我接触过不少体外诊断(IVD)设备厂商,尤其是做即时检验…...
AI技能库实战:模块化设计赋能博客创作自动化工作流
1. 项目概述:一个面向AI时代的博客技能开源库最近在GitHub上闲逛,发现了一个挺有意思的项目,叫inblog-inc/inblog-ai-skills。光看这个名字,就透着一股子“务实”的味道。它不是又一个教你如何调参炼丹的AI模型库,也不…...
这个内核 bug 潜伏了 9 年。
TL;DR — Linux 内核加密子系统的一行 sg_chain() 调用,让 page cache 页被放进了可写的 scatterlist。任何普通用户通过 splice() AF_ALG 就能精准覆盖 setuid 二进制的内存映像,5 秒 root。潜伏 9 年,影响 2017 年以来几乎所有主流发行版。…...
你的PNG文件为什么总是太大?让SuperPNG插件帮你解决这个痛点
你的PNG文件为什么总是太大?让SuperPNG插件帮你解决这个痛点 【免费下载链接】SuperPNG SuperPNG plug-in for Photoshop 项目地址: https://gitcode.com/gh_mirrors/su/SuperPNG 如果你经常使用Photoshop处理PNG图片,可能已经发现了一个令人头疼…...
Unity VR立体反射与抗锯齿技术实战解析
1. Unity VR 立体反射与抗锯齿技术深度解析在VR开发中,视觉真实感直接决定了用户体验的质量。立体反射和抗锯齿作为两项核心技术,前者解决了传统平面反射缺乏深度感的问题,后者则消除了画面边缘的锯齿瑕疵。本文将基于实际项目经验࿰…...
嵌入式GUI设计:资源受限下的高效人机交互实践
1. 嵌入式GUI设计的核心挑战与价值定位在咖啡机、车载仪表、医疗设备等嵌入式系统中,图形用户界面(GUI)承担着人机交互的关键桥梁作用。与桌面端或移动端GUI不同,嵌入式GUI面临三大独特约束:首先,硬件资源极度受限——典型嵌入式处…...
