信号
#信号(signal)
实现进程间的通信(IPC,Inter Process Communication)
不同操作系统,对信号类型的定义各不相同
有些信号既不能被用户自定义处理函数,也不能被阻塞PS:我不知道放这里合不合适,但还是放这里吧
#信号的作用
用于通知某个特定事件已经发生
进程收到一个信号后,对该信号进行处理
#实现信号--信号的保存和发送
常用的信号发送函数:int kill(pid_t pid,int sig)
pid即进程的唯一编号
sig即发送什么信号

上图其中的blocked信号是信号掩码,可以屏蔽某些特定的信号,如图,7,8无法被进程P1接收
用户进程间可以发送信号
OS系统内核也可以给用户进程发送信号,且具有最高权限,可以执行最多的信号
#实现信号--信号的处理
当进程从内核态转为用户态时,例行检查是否有待处理信号,如果有就处理信号

#如何处理信号
1.执行操作系统为此类信号设置的缺省(默认)信号处理程序
2.执行进程为此类信号设置用户自定义信号处理程序(自定义信号处理程序将覆盖1)
信号处理程序运行结束后,通常会返回进程的下一条指令继续执行(除非信号处理程序将进程阻塞或终止)
一旦处理了某个信号,就会将Pending为重置为0
重复收到的同类信号,将被简单丢弃(因为 仅有1bit记录一类待处理信号)
当同时收到多个不同类信号时,通常先处理序号更小的信号
#各个进程的信号处理的区别
很简单,每个进程除非用户自定义了该进程的某个信号处理程序,否则就执行系统的默认处理程序
#信号与异常的关系
信号可以作为“异常”的配套机制,让进程对操作系统的异常处理进行补充
有些异常无法有内核全部处理,可能还需要用户进程进行配合,此时就可以用“信号机制”与“异常机制”相互配合
有些异常可以由内核完成全部处理,此时就不必再使用信号机制。