信号的捕捉流程:主要是针对信号的自定义处理方式
信号并不是立即处理的,而是选择一个合适的时机去处理,合适的时机就是当前程序从内核态切换到用户态的时候
注意:程序如何从用户态切换到内核态?
答:1.程序异常的时候 2.发起系统调用的时候 3.中断的时候
信号的捕捉是当我们发起系统调用/程序异常/中断当前程序从内核态运行切换到用户态,去处理这些事情,处理完毕之后,要从内核态返回用户态,但是在返回之前会看一下是否有信号需要被处理,如果有就处理信号(切换到用户态执行信号的自定义处理方式),处理完毕之后再次返回内核态,判断没有信号要处理了就调用sys_sigreturn返回用户态(我们程序之前运行的位置)(就像我们课堂上布置的作业不会立即写)
注意:在使用这个接口时可能会因为该函数是库函数,而在Linux下的系统版本下会有细微差异
多是使用此函数所调用的系统调用接口sigaction
1 | int sigaction(int signum, const struct sigaction *act, |
1 | struct sigaction { |
下边是一个sigaction的使用demo:
1 | 1 /* |