【Linux】三分钟了解信号是如何被捕捉的?

一、信号的捕捉

1.从用户态到内核态

        在Linux当中,在执行主控制流的指令时被中断、异常或者系统调用时,此时程序会进入到内核态,目前为止,信号还没有被处理。

2.从内核态到用户态

        程序进入内核态并处理完之后,正常情况没有信号的话,程序会直接回到程序中断的执行流处继续执行程序。注意!如果此时已经有信号产生并没有被阻塞忽略的话,程序在内核态返回用户态的这一过程中,会处理产生的信号

二、信号的处理方式

1.默认信号处理方式

        如果捕捉到信号后,没有自定义该信号处理函数,系统会自动调用默认的函数处理信号,比如SIGINT,其默认处理方式就是结束当前前台所执行的进程,包括它的所有子进程。期间处理在内核态。

        处理完毕后,将返回到用户态继续执行执行流。

2.自定义信号处理方式

        如果捕捉到信号后,自定义了该信号处理函数(SIGKILL和SIGSTOP除外,这两类信号处理方式无法被自定义),系统会先回到用户态,进而直接去调用自定义的信号处理函数。

        之后,系统将再次回到内核态,最后再从内核态转变到用户态回到之前中断的执行流。

三、总结

        总结只有一句话,信号的捕捉就是从内核态转到用户态这一过程中进行,返回用户态时顺带检查是否有未处理的信号,如果有,则调用相应的函数处理,之后将回到用户态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evea_来自深渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值