信号:
什么是信号:是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。
有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 <csignal> 中。
信号的生命周期为:
从信号诞生到信号处理函数的执行完毕。
信号的分类:
实时信号:又称可靠信号,实时信号发送给进程时,不管在进程中是否已经注册,都会再注册一次,因此信号不会丢失
非实时信号:又称不可靠信号,非实时信号发送给进程时,如果在进程中已经注册过,则不再重复注册,将该信号丢失。
因此实时信号和非实时信号在信号的注册和注销操作不同
信号的生命过程:
- 信号"诞生":信号的诞生指的是触发信号的事件发生(如检测到硬件异常、定时器超时)
- 信号在目标进程中注册:就是信号值加入到进程的未决信号集中,只要信号在进程的未决信号集中,表明进程已经知道这些信号的存在,但还没来得及处理,或者该信号被进程阻塞。
- 信号在进程中的注销:在目标进程执行过程中,会检测是否有信号等待处理(每次从系统空间返回到用户空间时都做这样的检查)。如果存在未决信号等待处理且该信号没有被进程阻塞,则在运行相应的信号处理函数前,进程会把信号在未决信号链中占有的结构卸掉。
- 信号生命终止。进程注销信号后,立即执行相应的信号处理函数,执行完毕后,信号的本次发送对进程的影响彻底结束。
深入理解:信号产生方式