Linux---信号
2026/4/21 7:12:19 网站建设 项目流程

一、IPC

Linux/unix中三大经典的进程间通信方式为:共享内存,消息队列,信号量。

  • msg = Message Queue 消息队列→ 发消息、收消息,像快递收发站
  • shm = Shared Memory 共享内存→ 一块公共内存,大家都能读写,速度最快
  • sem = Semaphore 信号量→ 锁、同步工具,防止大家同时抢资源

二、Linux进程信号

1、罗列一下日常生活中的信号,提炼相关的结论:

红绿灯、闹钟、铃声、敲门、肚子叫、脸色~

信号在我们日常生活中,处处存在。

信号的处理方法:在信号产生之前,就已经准备好了---长年累月,在我们的大脑中构建了信号,和信号处理的映射。

认识信号,识别产生,动作处理。

信号定义:外部或者其他人或者硬件给进程发送的一种异步的事件通知机制。(异步指的是多种事件,彼此互不影响,同时发生)

2、信号的生命周期:

信号产生--->信号保存--->信号处理

3、信号的产生方式

(1)用命令kill产生(2)用键盘产生 ctrl+c是向目标进程发送信号 2号信号是默认动作终止进程,

ctrl+\是向目标进程发送3号信号,默认动作终止进程

ctrl+z:19号信号,默认就是暂停进程

只能用来控制前台进程,无法控制后台进程---因为只有前台进程,才能获取键盘输入。ctrl+c都是键盘输入,只有前台进程有资格获取。

问:为什么bash进程自己不对信号做响应。bash忽略了所有信号。

细节1:信号自定义捕捉,如果你的捕捉方法不退出,进程可能就不会退出了;如果我把所有的信号都自定义了,都不退出?-->进程都不退出?--信号 9号不可以被自定义。

细节2:信号处理,是谁处理?--信号处理

信号的本质是内核给进程发送一个通知,用来告诉进程”发生了某一个事件“,内核会在进程的PCB(进程控制块)里维护一个信号相关的字段,

那个信号,被进程收到了(没收到) ------->位图

进程是如何保存信息的?--->进程的task_struct结构体中,[ 1,31]用什么数据结构保存?

用一个位图来记录进程收到了哪些信号,unsigned int sigs就是一个信号位图,每一位对应一个信号编号,位为1:表示进程收到了该信号,还没处理。位为0:表示没有收到或已经处理完成。

信号位图在task_struct修改位图本质就是修改task_struct内核数据结构! 发送信号的方式有很多种,但是最终,只能有OS向目标进程写信号(系统调用)。

div 0 ,(当程序执行整数除法指令,且除数为0时CPU内部的算数逻辑单元(ALU))会检测到到错误,本质cpu出错了,算数运算逻辑错误。除数错误(除数为0)

*p=xx,本质MMU+页表->MMU报错

硬件报错,操作系统最先知道,操作系统最先知道硬件报错了,那一定是当前正在运行的进程,把硬件搞坏了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询