我想知道linux进程何时处理信号。 假设进程已经为信号安装了信号处理程序,我想知道进程的正常执行流何时被中断并且信号处理程序被调用。
根据http://www.tldp.org/LDP/tlk/ipc/ipc.html,进程将在系统调用退出时处理信号。这意味着像a = b + c(或其等效机器代码)这样的正常指令不会因信号而中断。
此外,系统调用在收到信号后会被中断(并且在EINTR失败或重新启动时)。这意味着即使在系统调用完成之前也会处理信号。这种行为似乎与我在前一段中提到的相矛盾。
因此,我不清楚何时处理信号以及进程处理哪个进程状态。它可以被打断
谢谢!
答案 0 :(得分:2)
根据http://www.tldp.org/LDP/tlk/ipc/ipc.html,进程将在系统调用退出时处理信号。这意味着像a = b + c(或其等效的机器代码)这样的正常指令不会因为信号而中断。
嗯,如果是这种情况,CPU密集型进程将无法遵守进程调度程序。事实上,调度程序可以在其时间量已经过去的任何时间点中断进程。除非它是FIFO实时过程。
更正确的定义:将信号传递给进程的一点是控制流离开内核模式以恢复执行用户模式代码。这不一定涉及系统调用。
答案 1 :(得分:1)
在第7节signal
手册页中记录了许多信号处理的语义(对于Linux,无论如何 - 其他操作系统可能有类似但不一定在同一位置),如果安装在您的系统可以像这样访问:
man 7 signal
如果未安装手册页,则很容易找到在线副本。