小编Kar*_*ran的帖子

unix 内核中的信号处理

我正在阅读 The Design Of UNIX OS 并且有一个疑问。

可以在 signal() 调用中指定信号处理函数。处理程序应该在进程收到该特定信号时执行。如果信号被进程接收,则称为 psig 的算法将运行以处理信号。

如果指定了用户定义的处理程序,psig 算法会修改用户级上下文(即,将一个帧压入栈顶,栈指针指向栈顶)该帧指示处理函数的执行.

如果上述情况属实,则信号处理函数应始终在从 signal() 调用返回后执行(因为内核将首先看到堆栈顶部的堆栈帧)。然而,这不是真的,因为我可以在我的代码中早些时候为特定信号指定一个信号处理程序(比如在 main() 中),并在稍后的时间点在代码中发送一个信号。信号处理函数仅在发送信号时执行(比如通过 kill() 调用),而不是在 signal() 调用之后立即执行。

有人可以澄清一下吗?

kernel

1
推荐指数
1
解决办法
1652
查看次数

标签 统计

kernel ×1