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);
psignal() 函数  :作用和perror一样
void psignal(int sig, const char *s);

信号掩码(阻塞信号传递)

处在信号掩码的信号会被阻塞,无法传递给进程进行处理,内核会将其阻塞,直到该信号从信号掩码中移除,内核才会把信号传递给进程从而进行处理

阻塞等待信号sigsuspend()

作用:将恢复信号掩码和pause()挂起进程两个动作封装成一个原子操作

int sigsuspend(const sigset_t *mask);

实时信号:

如果进程当前正在执行信号处理函数,在处理信号期间接收到了新的信号,如果该信号是信号掩码中的 成员,那么内核会将其阻塞,将该信号添加到进程的等待信号集(等待被处理,处于等待状态的信号)中, 为了确定进程中处于等待状态的是哪些信号,可以使用 sigpending()函数获取
int sigpending(sigset_t *set);set:处于等待状态的信号会存放在参数 set 所指向的信号集中

发送实时信号:

发送进程使用 sigqueue() 系统调用向另一个进程发送实时信号以及伴随数据。
接收实时信号的进程要为该信号建立一个信号处理函数,使用 sigaction 函数为信号建立处理函数,
并加入 SA_SIGINFO ,这样信号处理函数才能够接收到实时信号以及伴随数据,也就是要使用
sa_sigaction 指针指向的处理函数,而不是 sa_handler ,当然允许应用程序使用 sa_handler ,但这样就不能获取到实时信号的伴随数据了

异常退出abort()函数

void abort(void);

正常终止进程:
1.main函数通过return 语句退出程序

2.调用库函数exit()

3.系统调用终止进程,譬如exit(),_Exit()

异常终止进程:
1.被信号终止

2.调用abort函数,SIGABRT

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发人员必须掌握的几个高级命令

xargs命令 在平时的使用中,我认为 xargs 这个命令还是较为重要和方便的。我们可以通过使用这个命令,将命令输出的结果作为参数传递给另一个命令。 比如说我们想找出某个路径下以 .conf 结尾的文件,并将这些文件进行分类,那么普通的做法就是先将以 .conf 结尾的文件先找出…

逆向获取某音乐软件的加密(js逆向)

本文仅用于技术交流,不得以危害或者是侵犯他人利益为目的使用文中介绍的代码模块,若有侵权请联系作者更改。 老套路,打开开发者工具,直接开始找到需要的数据位置,然后观察参数,请求头,cookie是…

GitHub Universe 2023 Watch Party in Shanghai:在开源世界中找到真我

文章目录 ⭐ 前言⭐ “我”的开源之旅⭐ 为什么要做开源⭐ 要如何做好开源⭐ 开源的深度影响⭐ 小结 ⭐ 前言 周末有幸参加了在上海举行的 GitHub Universe 2023 Watch Party,这是一个充满激情和活力的开源开发者日。我有幸聆听了一场特别令人印象深刻的演讲&#…

“注我“合作伙伴or竞品分析。# 持续更新

"注我"的定位 合作或者竞品介绍 请问分析一个科技产品竞品的时候应该带着什么思维、问题、角度、框架或者系统去问? 在分析科技产品的竞品时,以下思维、问题、角度、框架或系统可能会有所帮助: 思维: 竞争思维&…

【c++随笔16】reserve之后,使用std::copy会崩溃?

【c随笔16】reserve之后,使用std::copy会崩溃? 一、reserve之后,使用std::copy会崩溃?二、函数std::reserve、std::resize、std::copy1、std::resize:2、std::reserve:3、std::copy: 三、崩溃原因分析方案1、你可以使…

Windows下使用CMake编译lua

Lua 是一个功能强大、高效、轻量级、可嵌入的脚本语言。它支持程序编程、面向对象程序设计、函数式编程、数据驱动编程和数据描述。 Lua的官方网站上只提供了源码,需要使用Make进行编译,具体的编译方法为 curl -R -O http://www.lua.org/ftp/lua-5.4.6.…

GAN的原理分析与实例

为了便于理解,可以先玩一玩这个网站:GAN Lab: Play with Generative Adversarial Networks in Your Browser! GAN的本质:枯叶蝶和鸟。生成器的目标:让枯叶蝶进化,变得像枯叶,不被鸟准确识别。判别器的目标&…

vim + ctags 跳转, 查看函数定义

yum install ctags Package ctags-5.8-13.el7.x86_64 already installed and latest version 创建 /home/mzh/pptp-master/tags.sh #!/usr/bin/shWORKDIR/home/mzh/pptp-masterfind ${WORKDIR} -name "*.[c|h]" | xargs ctags -f ${WORKDIR}/tags find /usr/inclu…

排序算法:【冒泡排序】、逻辑运算符not用法、解释if not tag:

注意: 1、排序:将一组无序序列,调整为有序的序列。所谓有序,就是说,要么升序要么降序。 2、列表排序:将无序列表变成有序列表。 3、列表这个类里,内置排序方法:sort( )&#xff0…

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1&#xf…

平台工程与 DevOps 和 SRE 有何不同?

在现代软件开发和运营的动态领域中 ,平台工程、DevOps 和站点可靠性工程 (SRE) 等术语 经常使用,有时可以互换使用,这常常会导致进入或浏览这些领域的专业人员感到困惑。了解这些概念之间的细微差别对于努力构建强大且可扩展的系统的组织至关…

爱智EdgerOS之深入解析安全可靠的开放协议SDDC

一、协议简介 在 EdgerOS 的智慧生态场景中,许多智能设备或传感器的生命周期都与 SDDC 协议息息相关,这些设备可能是使用 libsddc 智能配网技术开发的,也有可能是因为主要功能上是使用其他技术如 MQTT、LoRa 等但是设备的上下线依然是使用上…

构建外卖小程序:技术代码实践

在这个数字化的时代,外卖小程序已经成为餐饮业的一项重要工具。在本文中,我们将通过一些简单而实用的技术代码,向您展示如何构建一个基本的外卖小程序。我们将使用微信小程序平台作为例子,但这些原理同样适用于其他小程序平台。 …

连连看游戏

连通块记忆性递归的综合运用 这里x,y的设置反我平常的习惯,搞得我有点晕 实际上可以一输入就交换x,y的数据的 如果设置y1为全局变量的话会warning: warning: built-in function y1 declared as non-function 所以我改成p和q了…

阿里云人工智能平台PAI多篇论文入选EMNLP 2023

近期,阿里云人工智能平台PAI主导的多篇论文在EMNLP2023上入选。EMNLP是人工智能自然语言处理领域的顶级国际会议,聚焦于自然语言处理技术在各个应用场景的学术研究,尤其重视自然语言处理的实证研究。该会议曾推动了预训练语言模型、文本挖掘、…

Bytebase 2.12.0 - 改进自动补全和布局导航

🚀 新功能 支持 MySQL 高级自动补全。支持从 UI 上导入分类分级配置。 🔔 重大变更 作废已有企业版试用证书。之后可以通过提交申请获取新的试用证书。 🎄 改进 改进整体布局和导航。 支持在 SQL 编辑器里显示以及查询 PostgreSQL 数据…

HCIA-H12-811题目解析(9)

1、【单选题】下面选项中,能使一台IP地址为10.0.0.1的主机访问Interne的必要技术是? 2、【单选题】 FTP协议控制平面使用的端口号为? 3、【单选题】 使用FTP进行文件传输时,会建立多少个TCP连接? 4、【单选题】完成…

【算法Hot100系列】寻找两个正序数组的中位数

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

WordPress主题Lolimeow v8.0.1二次元风格支持erphpdown付费下载

WordPress国人原创动漫主题lolimeow免费下载 lolimeow是一款WordPress国人原创主题,风格属于二次元、动漫、可爱萝莉风,带有后台设置,支持会员中心。该主题为免费主题。 1.侧栏/无侧栏切换! 2.会员中心(配套Erphpdown…

JVM 详解(JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路)

目录 JVM 详解(JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路)1、概念:什么是 JVM ?JVM 的作用? 2、JVM 的主要组成部分?类加载器(Class Loader):简单…