信号是一种异步通信机制,它是在软件层面上对中断机制的一种模拟,
阻塞信号
信号有几种状态,首先是信号的产生 (Genertion),而实际执行信号处理动作时,状态为递达 (Delivery),信号在产生到递达中的状态被称为未决 (Pending)
进程可以选择阻塞 (Blocking)某些信号,被阻塞的信号在产生后将保持在未决状态,直到进程解除对该信号的阻塞,才执行递达的动作
1.4 信号的处理时机
信号是在什么时候被处理的呢?是在被投递的时候处理的吗,不是的。信号是在线程将要返回用户空间之前进行处理的。线程返回用户空间有两种情况,一是从系统调用返回,二是从中断返回。返回之前,线程会检查队列里有没有信号要处理,有的话就处理。
1.5 信号与多线程
信号的发送既可以发送给进程,也可以发送给线程,但是同步信号(也就是和当前线程执行相关而产生的信号)应当发送给当前线程。进程发送信号可以选择不同的接口函数,有的接口是发给进程的,有的接口是发给线程的。线程信号队列中的信号只能由线程自己处理,进程信号队列中的信号由进程中的线程处理,具体是由哪个线程处理是不确定的。
信号掩码(mask)的设置是线程私有的,每个线程都可以设置不同的信号掩码。
信号处理方式的设置是进程全局的,后面线程设置的方式会覆盖前面线程的设置。
信号处理的效果是进程全局的。