2

我想知道 linux 进程何时处理信号。假设进程已经为某个信号安装了信号处理程序,我想知道该进程的正常执行流程何时会被中断并调用信号处理程序。

根据http://www.tldp.org/LDP/tlk/ipc/ipc.html,该进程将在退出系统调用时处理信号。这意味着像 a = b+c (或其等效的机器代码)这样​​的普通指令不会因为信号而被中断。

此外,有些系统调用会在接收到信号时被中断(并因 EINTR 失败或重新启动)。这意味着甚至在系统调用完成之前就已经处理了信号。这种行为似乎与我在上一段中提到的相冲突。

因此,我不清楚何时处理信号以及该进程将在哪些进程状态下处理信号。可以中断吗

  1. 任何时候它从内核空间进入用户空间,或者
  2. 任何时候它在用户空间中,或者
  3. 任何时候进程被调度程序调度执行

谢谢!

4

2 回答 2

2

根据http://www.tldp.org/LDP/tlk/ipc/ipc.html,该进程将在退出系统调用时处理信号。这意味着像 a = b+c (或其等效的机器代码)这样​​的普通指令不会因为信号而被中断。

好吧,如果是这种情况,CPU 密集型进程将不会服从进程调度程序。事实上,调度程序可以在其时间片过去的任何时间点中断进程。除非它是一个先进先出的实时进程。

更正确的定义:将信号传递给进程的一个时间点是控制流离开内核模式以恢复执行用户模式代码的时间。这不一定涉及系统调用。

于 2013-01-14T16:06:25.810 回答
1

在第 7 节手册页中记录了许多信号处理的语义(对于 Linux,无论如何 - 其他操作系统可能有类似的,但不一定在同一位置)signal,如果安装在您的系统上,可以像这样访问:

man 7 signal

如果未安装手册页,则很容易找到在线副本。

于 2013-01-14T17:32:58.003 回答