信号的产生和状态

信号的产生:1.按键产生,如:Ctrl+c(内核向进程发送信号,杀死该进程)、Ctrl+z、Ctrl+\;2.系统调用产生,如:kill、raise、abort;3.软件条件产生,如:定时器alarm;4.硬件异常产生,如:非法访问内存(段错误)、除0(浮点数例外)、内存对齐出错(总线错误);5.命令产生,如:kill命令。

递达:递送并且到达进程。

未决:产生和递达之间的状态。主要由于阻塞(屏蔽)导致该状态。

信号的处理方式(内核处理):1.执行默认动作;2.忽略(丢弃);3.捕捉(掉用户处理函数)。

阻塞信号集(信号屏蔽字)与未决信号集:

Linux内核的进程控制块PCB是一个结构体,task_struct, 除了包含进程id,状态,工作目录,用户id,组id,文件描述符表,还包含了信号相关的信息,主要指阻塞信号集和未决信号集。未决信号集和阻塞信号集(信号屏蔽字),它们都是一个集合(set,即不重复但是无序)。集合(set)里存储的是数字(信号编号,从1开始),对应的0表示假,1表示真。即在阻塞信号集中,0表示未阻塞,1表示阻塞。

阻塞信号集(信号屏蔽字):将某些信号加入集合,对他们设置屏蔽,当屏蔽信号后,再收到该信号,该信号的处理将推后(解除屏蔽后)。

未决信号集:1. 信号产生,未决信号集中描述该信号的位立刻翻转为1,表信号处于未决状态。当信号被处理对应位翻转回为0。这一时刻往往非常短暂; 2. 信号产生后由于某些原因(主要是阻塞)不能抵达。这类信号的集合称之为未决信号集。在屏蔽解除前,信号一直处于未决状态。   因此阻塞信号集影响着未决信号集。

信号屏蔽字(阻塞信号集)和未决信号集本质就是一个寄存器,在64位操作系统中,它们都是64位的寄存器(字长64位),寄存器中每一位代表了每一个信号的状态,1为真,0为假。例如在未决信号集中,0表示该位表示的信号未产生或者已经产生且递达(此时0到1到0是瞬间发生的);而1表示已经产生但是未抵达,这是由阻塞信号集对其产生的影响。

信号的编号:可以使用kill –l命令查看当前系统可使用的信号有哪些。

不存在编号为0的信号。其中1-31号信号称之为常规信号(也叫普通信号或标准信号),34-64称之为实时信号,驱动编程与硬件相关(嵌入式开发用到)。名字上区别不大。而前32个名字各不相同。

总结:产生信号(5种,此时未决信号集中相应的序号对应立即变为1)  阻塞   解除阻塞   递达   处理:1.默认处理动作(5种)  2.忽略处理  3.捕捉

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

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

相关文章

【C++ Priemr | 15】虚函数常见问题

1. 在成员函数中调用虚函数&#xff1a; #include <iostream> using namespace std; class CBase { public:void func1(){func2();}virtual void func2() { cout << "CBase::func2()" << endl; } }; class CDerived : public CBase { public:virt…

965. 单值二叉树

如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#…

信号四要素

与变量三要素&#xff08;类型、名字、值&#xff09;类似的&#xff0c;每个信号也有其必备4要素&#xff0c;分别是&#xff1a;1.编号&#xff1b;2.名称&#xff08;即编号的宏定义&#xff09; &#xff1b;3.事件&#xff08;引起信号产生的事件&#xff0c;如段错误&…

958. 二叉树的完全性检验

给定一个二叉树&#xff0c;确定它是否是一个完全二叉树。 百度百科中对完全二叉树的定义如下&#xff1a; 若设二叉树的深度为 h&#xff0c;除第 h 层外&#xff0c;其它各层 (1&#xff5e;h-1) 的结点数都达到最大个数&#xff0c;第 h 层所有的结点都连续集中在最左边&a…

信号的产生

&#xff08;1&#xff09;终端按键产生信号&#xff08;与终端交互的进程&#xff09; Ctrl c → 2) SIGINT&#xff08;终止/中断&#xff09; "INT" ----Interrupt Ctrl z → 20) SIGTSTP&#xff08;暂停/停止&#xff09; "T" ----Termin…

897. 递增顺序查找树

给定一个树&#xff0c;按中序遍历重新排列树&#xff0c;使树中最左边的结点现在是树的根&#xff0c;并且每个结点没有左子结点&#xff0c;只有一个右子结点。 示例 &#xff1a; 输入&#xff1a;[5,3,6,2,4,null,8,1,null,null,null,7,9]5/ \3 6/ \ \2 4 8/ …

信号集操作函数

内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。综上&#xff1a;自定义信号集set&#xff08;也为一个字&#xff0c;64位&#xff09;通过信号集操作函数来改变信…

信号捕捉(signal、sigaction)

信号的基本属性&#xff1a;软中断&#xff0c;由内核发送&#xff0c;内核处理。某个进程通过内核向另一个进程发送信号时&#xff08;引起信号产生的五个因素&#xff09;&#xff0c;另一个进程将会陷入内核进行中断处理&#xff0c;未决信号集中相应信号置1&#xff0c;当递…

1090 Highest Price in Supply Chain (25)(25 分)

A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;经销商&#xff09;, and suppliers&#xff08;供应商&#xff09;-- everyone involved in moving a product from supplier to customer. Starting from one root suppli…

时序竞态(竞态条件)

产生原因&#xff1a;仍然以前文实现的sleep函数为例&#xff0c;如果进程在执行完alarm函数后&#xff0c;突然失去CPU&#xff0c;被阻塞等待&#xff08;这是有可能的&#xff0c;进程在执行过程中&#xff0c;若非原子操作&#xff0c;都有可能随时失去CPU&#xff09;&…

1106 Lowest Price in Supply Chain (25)

A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;经销商&#xff09;, and suppliers&#xff08;供应商&#xff09;-- everyone involved in moving a product from supplier to customer. Starting from one root suppli…

【Leetcode | 顺序刷题 】二分查找目录

二分查找序号题号129. 两数相除 50. Pow(x, n) 69. x 的平方根

sigsuspend函数(mysleep函数的改进)

可以通过设置屏蔽SIGALRM的方法来控制程序执行逻辑&#xff0c;但无论如何设置&#xff0c;程序都有可能在“解除信号屏蔽”与“挂起等待信号”这个两个操作间隙失去cpu资源。除非将这两步骤合并成一个“原子操作”。sigsuspend函数具备这个功能。在对时序要求严格的场合下都应…

【Leetcode | 顺序刷题】数学目录

序号题号1 7. 整数反转 28. 字符串转换整数 (atoi)39. 回文数443. 字符串相乘

全局变量的异步I/O问题

全局变量的异步I/O问题同样属于时序竞态问题&#xff0c;其本质就是多个进程或者同一个进程中的多个时序&#xff08;如主控程序和信号捕捉时的用户处理函数&#xff09;对同一个变量进行修改时&#xff0c;它们的执行顺序不一样就会导致该变量最终的值不一样&#xff0c;从而产…

【Leetcode | 03】String

字符串目录序号题号33. 无重复字符的最长子串 151. 翻转字符串里的单词

可/不可重入函数

一个函数在被调用执行期间&#xff08;尚未调用结束&#xff09;&#xff0c;由于某种时序&#xff08;递归或者处理信号捕捉时等情况&#xff09;又被重复调用&#xff0c;称之为“重入”。根据函数实现的方法可分为“可重入函数”和“不可重入函数”两种。看如下程序。 可以看…

【Leetcode | 顺序刷题】杂项目录

序号题号类别1136. 只出现一次的数字位运算2137. 只出现一次的数字 II位运算3 260. 只出现一次的数字 III 位运算4191. 位1的个数位运算5231. 2的幂位运算6342. 4的幂位运算7 338. 比特位计数 位运算8405. 数字转换为十六进制数位运算9371. 两整数之和位运算10401. 二进制手表位…

SIGCHLD信号

&#xff08;1&#xff09;SIGCHLD信号产生的条件 1.子进程终止时会向父进程发送SIGCHLD信号&#xff0c;告知父进程回收自己&#xff0c;但该信号的默认处理动作为忽略&#xff0c;因此父进程仍然不会去回收子进程&#xff0c;需要捕捉处理实现子进程的回收&#xff1b; 2.子…

信号传参

&#xff08;1&#xff09;发送信号传参 前面已经知道从一个进程向另一个进程发送信号可以使用kill函数&#xff0c;但是kill函数在向进程发送信号的时候不能携带除了信号以外的其他信息&#xff0c;这时可以使用与kill相对应的sigqueue函数&#xff0c;该函数也是向一个进程发…