LINUX系统编程:信号(2)

目录

2.信号的保存

2.1信号保存的基本概念

2.2信号在哪里保存的?怎么保存的?

2.3处理信号的三张表

2.4三张表的匹配操作和系统调用接口

2.4.1sigprocmask

2.4.2sigemptyset

2.4.3sigfillset

2.4.4sigaddset&&sigdelset

2.4.5sigismember

2.4.6sigpending

2.5demo代码

细节


2.信号的保存

2.1信号保存的基本概念

处理信号的动作叫做递达(Delivery),处理信号有三种方式,默认,忽略,自定义。

信号从产生到信号递达之间的状态叫做未决(Pending)。

进程可以选择阻塞(Block)某个信号。

2.2信号在哪里保存的?怎么保存的?

信号是在进程pcb中被保存的,也就是task_struct中。

保存的方式采用的是位图。

struct
{
    unsigned long int pending;
    unsigned long int block;
};

pending:比特位的位置表示信号的编号,比特位的内容表示是否是未决的。

block:比特位的位置表示信号的编号,比特位的内容表示是否是阻塞。

阻塞和忽略不是一个概念

阻塞是阻止信号递达,忽略是递达之后忽略。

2.3处理信号的三张表

block就是block位图,pending就是pending位图,handler是一个函数指针数组。

当进程收到2信号,首先会将pending位图第二比特位变为1,等到机会合适时处理pending中的信号,处理时会看2号信号的位置在block中是否为1,如果为1就阻塞住,不递达,为0就递达,调用handler中对应的函数。

2.4三张表的匹配操作和系统调用接口

2.4.1sigprocmask

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值