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…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
