信号处理

一. 信号是一种软中断,

  中断分为硬中端和软中断,软中断是来自其他程序的中断,硬中断是来自硬件设备的中断

二.常见的信号

  SIGINT,SIGCONT,SIGALRM,SIGSTOP,SIGTSTP,SIGABRT,SIGKILL,SIGQUIT,SIGCHLD

三.信号分为不可靠信号和可靠信号

  编号小于34的是不可靠信号,不支持排队,无论发送多少信号,程序只执行一次,信号会丢失

  编号大于34小于64属于可靠信号,支持排队,排队等候处理

  无论是可靠信号还是不可靠信号,都通过kill发送信号

四.信号的捕获与处理

  通过signal函数进行注册,函数只执行一次,如果想一直处理,可以在函数结束时,再次申请注册signal

   

五.子进程信号的处理

  通过fork创建的子进程是跟父进程一样的信号处理方式

  但是vfork不一样,子进程与父进程不一样的信号处理方式

六.

  sleep pause,alarm

七.

  信号集与信号屏蔽
  什么是信号集:信号的集合sigset_t,由128个二进制组成,每一个二进制
  代表一个集合

  为什么要设置进程信号屏蔽:当执行一些敏感操作时不希望被一些信号打扰,但有不希望
  信号丢失(忽略),可以先吧信号屏蔽了让信号处于未决状态(信号一惊产生但是内核还没法给相应的进程)
  等把事情处理完再解除屏蔽,未决的信号就会达到西施再处理,忽略,终止

  int sigpending(sigset_t *set)
  功能:获取未决状态的信号,可以在解除信号屏蔽前预先查找有那写未决状态的信号

原文地址:https://www.cnblogs.com/gumpzlc/p/9368333.html