信号产生到触发过程

1.信号是怎么产生的?

可以由内核,进程产生

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

2.1.发送进程->内核

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

2.2.内核到->接受进程

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

3.信号处理过程??

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值