小工具知识网

当前位置: 首页 > 行业知识 > 波奇学Linux:信号的发送和保存

行业知识

波奇学Linux:信号的发送和保存

2026-11-06 17:31:43 来源:互联网转载

信号的发送的对象是pcb

task_struct{int signal; //0000 0000 .... 0001

进���pcb中存在int型的signal来保存信号,用位图的方式,比特位的0,1表示是否收到信号

比特位位置表示信号的编号。

 发信号的本质就是修改task_struct的信号位图对应的比特位。

信号的作用是为了给用户层传递信息

信号的保存的原因:进程收到信号不会立即处理这个信号,要有个时间窗口

实时信号:立即处理,不能丢失

信号的保存

信号递达,信号未决,信号阻塞

信号递达(delivery):实际执行信号的处理的动作,即执行。

信号未决(pedding):信号从产生到递达之间的状态,就是把修改对应比特位,即信号传到进程。

进程可以选择阻塞(Block)某个信号,被阻塞的信号将处于pending状态,解除阻塞才进入递达状态。

忽略是递达后的状态和block不一样,忽略和自定义,默认是递达后三种处理方法

用户提供的方法可以覆盖handler数组的自定义方法

信号集类型sigset_t:封装好的位图

sigemptyset():初始化,并类图所有项都为0

sigaddset(sigset_t*set, int signum) 将位图的第signum位设为1

函数sigprocmask读取或者更改进程的信号屏蔽字。

修改当前进程的block位图

how的选项是

SIG_BLOCK:取位图交集

SIG_UNBLOCK:最后的set的block是参数set和old set共有的

SIG_SETMASK :覆盖

set:是新的位图

oldset是系统的位图

接口实操代码

#include#include#includeusing namespace std;void PrintPending(sigset_t &pending){    for(int signo=1;signo

上一篇:flutter实战 -- 百度地图

下一篇:怎么开启防火墙服务器?