信号

#信号(signal)

  • 实现进程间的通信(IPC,Inter Process Communication)
  • 不同操作系统,对信号类型的定义各不相同
  • 有些信号既不能被用户自定义处理函数,也不能被阻塞PS:我不知道放这里合不合适,但还是放这里吧
  • #信号的作用

  • 用于通知某个特定事件已经发生
  • 进程收到一个信号后,对该信号进行处理
  • #实现信号--信号的保存和发送

  • 常用的信号发送函数:int kill(pid_t pid,int sig)
  • pid即进程的唯一编号
  • sig即发送什么信号
  • Pasted image 20260623201600.png

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

  • 当进程从内核态转为用户态时,例行检查是否有待处理信号,如果有就处理信号
  • Pasted image 20260623202842.png

  • #如何处理信号
  • 1.执行操作系统为此类信号设置的缺省(默认)信号处理程序
  • 2.执行进程为此类信号设置用户自定义信号处理程序(自定义信号处理程序将覆盖1)
  • 信号处理程序运行结束后,通常会返回进程的下一条指令继续执行(除非信号处理程序将进程阻塞或终止)
  • 一旦处理了某个信号,就会将Pending为重置为0
  • 重复收到的同类信号,将被简单丢弃(因为 仅有1bit记录一类待处理信号)
  • 当同时收到多个不同类信号时,通常先处理序号更小的信号
  • #各个进程的信号处理的区别

  • 很简单,每个进程除非用户自定义了该进程的某个信号处理程序,否则就执行系统的默认处理程序
  • #信号与异常的关系

  • 信号可以作为“异常”的配套机制,让进程对操作系统的异常处理进行补充
  • 有些异常无法有内核全部处理,可能还需要用户进程进行配合,此时就可以用“信号机制”与“异常机制”相互配合
  • 有些异常可以由内核完成全部处理,此时就不必再使用信号机制。