行业知识
波奇学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
下一篇:怎么开启防火墙服务器?