信号何时传递
同步产生的信号会立即传递。例如,硬件异常会触发一个即时信号,而当进程使用raise()向自身发送信号是,信号会在raise调用返回前就已经发出。
当异步产生一个信号,即使并未将其阻塞,在信号产生和时机传递之间仍有一个(瞬时)延迟。在此期间,信号处于等待状态。这是因为内核将等待信号传递给进程的时机是,该进程正在执行,且发生由内核态到用户态的下一次切换时。实际上,这意味着再以下时刻才会传递信号。
- 进程再前度超时后,再度获得调度时(即,在一个时间片的开始处)。
- 系统调用完成时(信号的传递可能引起正再阻塞的系统调用过早完成)。
解除对多个信号的阻塞时,信号的传递顺序
就目前的Linux实现而言,Linux内核按照信号编号的升序来传递信号。例如,如果对处于等待状态的信号SIGINT(2)和SIGQUIT(3)同时解除阻塞,无论两个信号产生次序如何,SIGINT都先于SIGQUIT而传递
网友评论