Linux---信号
一、IPCLinux/unix中三大经典的进程间通信方式为共享内存消息队列信号量。msg Message Queue 消息队列→ 发消息、收消息像快递收发站shm Shared Memory 共享内存→ 一块公共内存大家都能读写速度最快sem Semaphore 信号量→ 锁、同步工具防止大家同时抢资源二、Linux进程信号1、罗列一下日常生活中的信号提炼相关的结论红绿灯、闹钟、铃声、敲门、肚子叫、脸色~信号在我们日常生活中处处存在。信号的处理方法在信号产生之前就已经准备好了---长年累月在我们的大脑中构建了信号和信号处理的映射。认识信号识别产生动作处理。信号定义外部或者其他人或者硬件给进程发送的一种异步的事件通知机制。异步指的是多种事件彼此互不影响同时发生2、信号的生命周期:信号产生---信号保存---信号处理3、信号的产生方式1用命令kill产生2用键盘产生 ctrlc是向目标进程发送信号 2号信号是默认动作终止进程ctrl\是向目标进程发送3号信号默认动作终止进程ctrlz19号信号默认就是暂停进程只能用来控制前台进程无法控制后台进程---因为只有前台进程才能获取键盘输入。ctrlc都是键盘输入只有前台进程有资格获取。问为什么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*pxx本质MMU页表-MMU报错硬件报错操作系统最先知道操作系统最先知道硬件报错了那一定是当前正在运行的进程把硬件搞坏了。