Linux进程信号

信号:给进程发送的,用来进行事件异步通知的一种方式 属于软中断

产生信号的方式非常多

键盘产生信号 ctrl+c给目标进程发送信号,很多信号的处理动作是终止

收到信号,处理信号

1.默认处理动作

2.自定义信号处理动作

3.忽略处理

发送信号的本质是向目标进程写信号 修改位图

修改位图本质是修改内核的数据

后台进程无法从标准输入中获取内容

前台进程可以

前台进程必须只有一个

后台进程可以有多个

但是都可以向标准输出上打印

系统调用可产生信号

调用系统命令可向进程发信号

硬件异常也可产生信号 除零 野指针

软件条件可产生信号

信号保存

实际执行信号的处理动作称为信号递达

信号从产生到递达之间的状态 成为信号未决

进程可选择阻塞某个信号

被阻塞的信号产生时将保持在未决状态 直到进程解除阻塞

信号的处理要在合适的时候

a.合适的时候处理信号 进程从内核态,返回到用户态的时候

检查信号的捕捉

b.如果信号是默认呢 忽略呢

比自定义捕捉简单

c.重谈捕捉过程

c1:我们在执行自定义方法(用户写的)->os也要在做身份切换 必须以用户身份执行

c2:在执行主控制流程的某条指令时因为中断、异常或系统调用进入内核;

内核处理完异常准备回用户模式之前,先处理当前进程中可以递送的信号;

如果信号的处理动作是自定义的信号处理函数,则回到用户模式,执行信号处理函数;

信号处理函数返回时执行特殊的系统调用sigreturn再次进入内核sys_sigreturn;

返回用户模式从主控制流程中上次被中断的地方继续向下执行

硬件中断

外设就绪时 向中断控制器发起中断 中断控制器通知cpu cpu得知中断后获取中断号 cpu保护现场

根据中断号 执行中断处理例程 执行中断方法 执行完毕后恢复现场 处理完毕中断 继续之前的工作

os怎么知道键盘上有数据了? 硬件中断

当没有中断到来的时候 os是暂停的

os是基于中断进行工作的软件

时钟源放在cpu 外设没有中断 cpu自己触发中断 调用schedule()

处理器频率即中断触发频率

volatile 修饰的变量要占用空间 操作系统要保证内存空间可见性

防止优化编译器把变量从内存装入 CPU 寄存器中

volatile 的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值

子进程在终止时会给父进程发SIGCHLD             

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值