1.信号处理的过程:
发送->内核挂起->递送(所有皆图片来源于:一口linux公众号,侵权可删)
2.用户态 到 内核态 的触发原理
我觉得主要分为软件触发,硬件触发,cpu异常。
软件触发,即用户代码执行系统调用。主动申请内核服务(eg,读文件,发网络包,申请内存),强制性触发的。
硬件触发,主要由于硬件中断(外设完成工作,发送中断请求) 。
cpu异常(eg,访问非法内存)。
3.信号是如何打断进程的。
基本流程(用自己话说)
用户态正常执行代码,当有满足 用户态转到内核态 的触发条件的时候(即上面的第二条),先保存现场,再转到内核态。
内核态处理事件(明天将详细展开,到底内核处理那些事件),如果有信号,就设置pending位为1。
退出内核态进入用户态前,先检查是否有pending(pending为内核通用标记,信号只是其中一种),如果是信号的pending,那么久返回用户态后,直接执行handle函数,执行完再切回内核扫尾(具体扫什么尾部),最后再恢复现场 。
4.signal和sigaction区别