我想知道linux进程什么时候处理信号。
假设进程已经安装了信号的信号处理程序,我想知道进程的正常执行流程何时会被中断并调用信号处理程序。
根据http://www.tldp.org/LDP/tlk/ipc/ipc.html http://www.tldp.org/LDP/tlk/ipc/ipc.html,进程在退出系统调用时会处理该信号。这意味着像 a = b+c 这样的普通指令(或其等效的机器代码)不会因为信号而被中断。
此外,有些系统调用在收到信号后会被中断(并因 EINTR 失败或重新启动)。这意味着信号甚至在系统调用完成之前就已被处理。这种行为似乎与我在上一段中提到的相冲突。
因此,我不清楚信号何时被处理以及进程将在哪些进程状态下处理信号。可以中断吗
- 任何时候它从内核空间进入用户空间,或者
- 任何时候它在用户空间,或者
- 任何时候进程被调度程序安排执行
Thanks!
根据http://www.tldp.org/LDP/tlk/ipc/ipc.html http://www.tldp.org/LDP/tlk/ipc/ipc.html,进程在退出系统调用时会处理该信号。这意味着像 a = b+c 这样的普通指令(或其等效的机器代码)不会因为信号而被中断。
好吧,如果是这样的话,CPU 密集型进程就不会服从进程调度程序。事实上,调度程序可以在进程的时间量过去后的任何时间点中断进程。除非是FIFO实时进程。
更正确的定义:信号被传递到进程的一个时刻是控制流离开内核模式以恢复执行用户模式代码的时刻。这不一定涉及系统调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)