🪐🪐🪐欢迎来到程序员餐厅💫💫💫
主厨的主页:Chef‘s blog
所属专栏:青果大战linux
为什么我的课设这么难啊,久久叔叔吧,悲,模电要挂了
信号的概念
信号和信号量没有任何关系,他们就是老婆和老婆饼的关系
信号是进程之间事件异步通知的一种方式,属于软中断。
- 同步(Synchronous)
- 定义:同步操作是一种按照顺序依次执行的方式。在同步模式下,一个任务必须等待前一个任务完成后才能开始。可以把它想象成一个餐厅,顾客(程序)点完菜(发起任务)后,顾客什么都不干,等菜上来了,开始吃饭,这就是同步
- 异步(Asynchronous)
- 定义:任务的发起和完成不需要严格按照顺序。当一个异步任务被发起后,程序不会等待这个任务完成,而是可以继续执行其他任务。当异步任务完成时,会通过某种方式(如回调函数、事件通知等)通知程序。可以把它想象成一个餐厅,顾客(程序)点完菜(发起任务)后,可以做其他事情,比如聊天、看手机,等菜做好了(任务完成),服务员会通知顾客,这就是异步
- 示例:在 JavaScript 中,使用
setTimeout()
函数就是一种异步操作。例如,setTimeout(() => console.log("Hello"), 1000);
会在 1 秒后打印 “Hello”,但是在这 1 秒内,程序可以继续执行其他代码,而不是等待这个打印操作。
- 因为信号也是由进程发送的,所以当一个进程正常运行的时候,系统收到了比如杀死这个进程的信号,那么就会有一个进程A作为信号去终止该进程B。但是B进程是不会等信号来的,而是一直做自己的事情。
可以通过指令kill -l
来查询linux所支持的常见信号:
这里的信号如一号信号SIGHUP都属于宏,他们的值就是他们的编号,SIGHUP的值就是1.
[1, 31]
:这些信号称为非实时信号
,当进程收到这些信号后,可以自己选择合适的时候处理[34, 64]
:这些信号称为实时信号
,当进程收到这些信号后,必须立马处理- 实时操作系统:对外部事件响应有严格时间要求,必须在规定时间内作出响应。在任务调度上,采用优先级抢占式和时间片轮转(同优先级)调度,确保关键任务优先执行。用于工业控制、航空航天、医疗设备等对时间敏感的领域。
- 非实时操作系统:没有严格时间限制,注重通用功能。在任务调度上,有优先级调度(非严格抢占)和公平共享调度,平衡资源分配。用于个人桌面和部分服务器领域,对响应时间要求不高。
事实上,大多数计算机都是非实时的,因此我们今天只学习非实时信号。
进程是如何认识信号的
进程识别信号,由程序员内置的特性,信号的处理方法,在信号产生前就设置好了
就像你在第一次过马路之前,就先被别人告诉了红灯停,绿灯行的信号处理方法
信号会被立刻处理吗
处理信号,不一定是立即处理的,而是选取一个合适的时候
因为当前做的事情的优先级可能比处理信号这件事更高,
处理信号的方法
-
默认方法
-
忽略该信号(忽略本身也是一种处理方法!!)
-
自定义处理方法
signal
signal
函数是在 Unix、Linux 等操作系统中用于设置信号处理方式的函数。
参数解释