一、信号在内核中的表示
1.首先我们来了解几个基本的概念
- 信号的递达(Delivery):实际执行信号的三种处理动作;
- 信号的未决(pending):信号从产生到递达之间的过程;
- 阻塞信号(Block):被阻塞的信号产生时将保持在未决的状态,直到进程解除对此信号的阻塞,才会执行递达动作;
2.阻塞和忽略的区别
忽略是信号默认处理动作的一种,即信号的递达,而阻塞是信号未决的状态,只有解除阻塞,才能达到递达状态,即处理信号
3.进程中每个信号都有两个标志位,即阻塞(Block)和未决(pending),还有一个函数指针表示处理动作(handler),他们存储在进程的PCB中,struct sigpending pending;字段就是存放信号的信号表。
其中一旦信号被block,当有信号产生的时候会一直pending,因为未决就是未处理的意思,block到不了就处理不了,pending会一直有该位
因为PCB中使用32位来表示上图中的block和pendin