信号是操作系统进程间通信的一种方式。典型应用场景如:用户在任务执行过程中,通过Ctrl+c中断任务执行,操作系统在接收到到Ctrl+c后,将向对应进程发出INT信号,所谓发出INT信号,实际就是将对应的进程PCB,信号标志位置位。在进程由内核态切换为用户态时,由内核设置信号处理句柄,在正式恢复为用户态时执行信号处理句柄。
信号处理句柄的设置,设置细节较为复杂,在此不做细节分析,仅做整体描述,可以理解为在原有用户调用栈栈帧之上构造了一个信号处理句柄栈帧,进行返回执行。
信号处理句柄,可以使用系统默认句柄,也可以由用户自行设定(ps:部分信号用户不可设定处理句柄)。信号句柄需满足可重入。所谓可重入可以理解为在执行的任意时间点中断执行,然后再次被执行。
由此,信号处理句柄不可使用互斥锁之类的同步设施。为什么不能使用?因为可能会发生同一个线程重复进行互斥锁的开锁解锁相关操作,会导致数据异常(互斥锁相关操作会修改线程数据结构)。而多线程使用互斥锁则不受此约束。
最后:进程是信号的发送目标,线程是信号的执行单位