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)