我想知道 linux 进程何时处理信号。假设进程已经为某个信号安装了信号处理程序,我想知道该进程的正常执行流程何时会被中断并调用信号处理程序。
根据http://www.tldp.org/LDP/tlk/ipc/ipc.html,该进程将在退出系统调用时处理信号。这意味着像 a = b+c (或其等效的机器代码)这样的普通指令不会因为信号而被中断。
此外,有些系统调用会在接收到信号时被中断(并因 EINTR 失败或重新启动)。这意味着甚至在系统调用完成之前就已经处理了信号。这种行为似乎与我在上一段中提到的相冲突。
因此,我不清楚何时处理信号以及该进程将在哪些进程状态下处理信号。可以中断吗
- 任何时候它从内核空间进入用户空间,或者
- 任何时候它在用户空间中,或者
- 任何时候进程被调度程序调度执行
谢谢!