内核信号标志:
- 当造成信号的事件发生时,为进程产生一个信号(或向一个进程发送一个信号)。事件可以是硬件异常(例如除以 0)、软件条件 (例如,闹钟时间超过)、终端产生的信号或调用kill函数。当一个信号产生时,内核通常在进程表中以某种形式设置一个标志
未决的信号:
- 当对信号做了这种动作时,我们说向一个进程递送了一个信号。 在信号产生(generation)和递送(delivery)之间的时间间隔内,称信号未决(pending)
阻塞信号
如果为进程产生了一个阻塞的信号:
- 如果对该信号的动作是系统默认动作或捕捉该信号:则为该进程将此信号保持为未决状态,直到该进程对此信号解除了阻塞。或者将对此信号的动作更改为忽略
- 当递送一个原来被阻塞的信号给进程时,而不是在产生该信号时,内核才决定对它的处理方式。于是进程在信号递送给它之前仍可改变对它的动作
信号排队
- 当一种信号类型处于阻塞期间时,产生了多个相同的信号,那么这个类型的信号变为非阻塞时,只向进程发送一次
- 每个进程都有一个信号屏蔽字(signal mask),它包含了当前要阻塞递送到该进程的信号集
- 对于每种可能的信号,该屏蔽字中都有一位与之对应。对于某种信号,如果想要阻塞它,就设置信号屏蔽字对应的位
- 进程可以调用sigprocmak来检测和更改其当前信号屏蔽字
- 通过sigpending检测信号屏蔽字