linux信号机制[二]

阻塞信号

信号相关概念

  • 实际执行信号的处理动作称为信号递达(Delivery)
  • 信号从产生到递达之间的状态,称为信号未决(Pending)。[收到信号但是没有处理]
  • 进程可以选择阻塞 (Block )某个信号。
  • 被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作.
  • 注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。

忽略和阻塞处理的区别:

忽略代表信号已经抵达,并且处理了,处理的方式就是什么都不干。而阻塞则信号压根没有被递达。阻塞的信号如果不解除阻塞的话永远不会被递达,只有解除阻塞才可以。 

由上面的概念我们可以得出pcb内部其实由3张表

对padding的修改代表是否收到了信号,以及收到了什么信号。handler 是函数指针,代表着各个信号的实现方法。  自定义信号捕捉,就是把自己的函数处理方式填到handler里面。

在信号处理的时候方法是直接调用的吗?

NO对于我们传入的参数,他会先进行强制类型转换,如果等于1,执行默认行为,等于2忽略,都不等于才会执行调用对应的方法。

block表也是一个位图结构和padding一模一样。唯一的差别是位图中的内容代表信号是否被阻塞。

一个信号被处理的过程

操作系统修改padding位图,然后查找block表看是否被阻塞,然后进入对应的handler表执行处理方法。

sigset_t

每个信号只有一个bit的未决标志,非0即1,不记录该信号产生了多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值