linux 信号机制

https://blog.csdn.net/u010765526/article/details/80085895

https://www.it610.com/article/5144432.htm

https://www.freesion.com/article/9709773781/

我们可以将示意图分为信号接收、检测和处理这三个部分。

(1)、信号的接收

接收信号的任务是由内核代理的,当内核接收到信号后,会将其放到对应进程的信号队列中,同时向进程发送一个中断,使其陷入内核态。

注意,此时信号还只是在队列中,对进程来说暂时是不知道有信号到来的。

(2)、信号的检测

进程陷入内核态后,对信号进行检测,当发现有新信号时,便会进入下一步,信号的处理。

(3)、信号的处理

信号处理函数是运行在用户态的。内核会将当前内核栈的内容备份拷贝到用户栈上,进程返回到用户态中,执行相应的信号处理函数。

信号处理函数执行完成后,还需要返回内核态,检查是否还有其它信号未处理。如果所有信号都处理完成,就会将内核栈恢复(从用户栈的备份拷贝回来),同时恢复指令寄存器(eip)将其指向中断前的运行位置,最后回到用户态继续执行进程。

(0)

相关推荐