一、理解信号
1.信号是什么
Linux中的信号其实和日常生活中的信号还是挺像的,LInux中的信号是一种事件通知机制,通知进程发生了某个事件。进程接收到信号后,就会中断当前的操作,然后去处理这个信号所代表的事件。
每种信号都有自己对应的事件,信号有多种,事件也就有多种。进程要处理事件,自然就需要有对应的处理方法。每种信号都有自己对应的处理方法,这个方法其实就是信号的处理函数。进程收到信号后,就去执行这个信号对应的处理函数。
用一个生活中的例子来理解信号:以过马路为例,过马路就是一个进程,走到马路边看到信号灯是红色(红色信号灯就是信号),这个信号告诉我们现在不能过,要等一会(红色信号的处理函数就是停下来等待绿灯)。因此我们过马路的这个进程就被打断了,这个信号的处理函数就是等待绿灯的到来,等这个信号所对应的函数执行结束,我们就可以继续过马路了。
信号其实是宏,如下图所示:
2.信号的种类
查看信号的命令:
- kill -l
如图:Linux中共64种信号,1 ~ 31是非可靠信号(非实时信号),32 ~ 64 是可靠信号(实时信号)。
实时信号与非实时信号的区别:
- 实时信号优先级高,系统首先处理实时信号。
- 实时信号会记录信号发送的次数,而非实时信号不会。(这个很重要)
二、简单理解信号的生命周期
信号的生命周期分为四部分:
- 产生:就像红灯亮了,这就产生了一个信号
- 注册:就是让进程知道自己收到了某个信号。就像是看到红灯后,我们就知道我们收到了红灯信号。
- 注销:进程在处理信号之前将信号的存在痕迹抹除。
- 处理:调用信号的处理函数