信号

本文详细阐述了信号在操作系统中的产生、发送、处理流程。信号由内核或进程生成,通过内核传递,并可能根据接收进程的状态进行处理。早期的信号处理采用不可靠信号,而现代Linux系统则使用信号队列来存储信号。在进程切换回用户态前,会检查并处理信号。信号处理方式包括默认操作和用户自定义操作,其中SIGKILL和SIGSTOP无法忽略。
摘要由CSDN通过智能技术生成

1.信号是怎么产生的?

可以由内核,进程产生

2.信号怎么发送到进程?

2.1.发送进程->内核

所有信号都需要通过内核发送,内核在收到信号后会对其参数进行检测(这个进程能不能发送这个信号…)。校验通过后,将信号数据(信号值,产生原因,发送者进程ID)拷贝到内核空间.然后再发送给对应的进程。

2.2.内核到->接受进程

早期UNIX版本,进程保存了一份未处理信号的位图。当内核发送信号到进程时,先检测进程是否对该信号未处理,时则丢弃当前信号。这样的信号称为不可靠信号。不可靠信号每次执行完都会恢复默认行为(需要重复注册).
在以后linux 版本中对其进行了改进。内核发送信号到进程时,将其保存到信号队列中。但是为了兼容以前的版本对0-31的信号还是保持原有的处理。

3.信号处理过程??

进程从内核态切换到用户态前,检测是否有信号需要处理,如果有且没有被阻塞就会调用相应的信号处理程序去处理。
首先,内核在用户栈上创建一个frame,frame中将返回地址设置成信号处理函数的地址,这样,从内核返回用户态时,就会执行这个信号处理函数。
当信号处理函数执行完,会再次进入内核,检测有没有没处理完的信号,和恢复用户栈。

4.信号处理的几种处理方式?

默认操作
用户自定义操作
忽略 SIGKILL,SIGSTOP 不可忽略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值