目录
引入
共同特点
信号
介绍
特点
异步
概念
同步
查看信号
kill -l
实时操作系统 和 分时操作系统
分时
实时
man 7 signal
引入
生活中有关信号的东西有很多
例如:红绿灯,闹钟,转向灯等等
共同特点
他们都有共同的特点:
- 我们是认识这些信号的,以及出现这些信号后我们知道需要干什么(我们都知道红灯停,绿灯行)
- 认识信号+干什么 -- 其实也就是可以识别信号
- 认识信号 -- 即使没有出现这些信号,我们依然是知道这些信号相关内容的
- 但是,我们接收到信号后,不一定就立即去处理它
- (比如绿灯亮了,我们还可以等等再出发;或者外卖到了,你也不一定立刻就去拿)
- 因为我们不会立即处理,所以我们需要临时记住信号
- (不然过了一会你把拿外卖这个行为忘掉了,相当于忽略了这个信号的产生,这样是不符合我们的预期的)
信号
介绍
- 在Linux操作系统中,信号是一种轻量级的进程间通信机制,用于在进程之间传递简单的通知
- 当某个事件发生时,内核或其他进程可以向目标进程发送一个信号,目标进程在接收到信号后会执行相应的操作
- 信号可用于通知进程发生的异常事件、请求进程终止或用户定义的事件等
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到
特点
- 和前面介绍的生活中的信号特点类似
- 首先,进程需要有识别信号的能力(也就是认识这个信号是什么,以及收到信号后该如何处理)
- 而这份能力,是由程序员交给它的(以代码的形式)
- 信号产生的时间是随机的(无法确定收到的准确时间)
- 所以,进程不会去阻塞等待信号出现,而是先干自己的事
- 也就是 -- 接收到信号后,进程也不一定会立即处理,这也就是异步机制
- 为了方便后续的操作,进程需要记录收到的信号,等到合适的时候,再去处理
异步
一般来说,信号的产生对于进程是异步的
概念
- 在异步编程中,当一个任务被触发或启动后,程序不会立即阻塞等待该任务完成 , 而是会继续执行后续的代码,而异步任务会在后台进行
- 一旦异步任务完成,它可以通知程序,并处理任务的结果
同步
- 程序会在一个任务执行完成之前阻塞,并等待该任务返回结果后,再继续执行后续的任务
- 对于一些耗时的任务和I/O操作来说,可能导致程序的执行效率较低
查看信号
kill -l
这些是linux中可以支持的信号列表:
- 一共62个信号,编号从1开始,没有32,33
- 1 ~ 31为普通信号(我们最常用的信号)
- 34 ~ 64为实时信号,我们先不用知道它是什么
实时操作系统 和 分时操作系统
分时
为进程分配时间片,切换执行
实时
立即响应
man 7 signal
是关于信号的详细解释
包括信号的含义、产生原因、默认行为、处理方式等信息: