【发布时间】:2014-08-25 16:49:58
【问题描述】:
我一直在研究信号,但我想了解它们是如何工作的,我需要对这个问题有一些深入的回答
例如,如果一个进程使用 libc 函数向另一个进程发送信号。
1-这个进程可以在不进入内核空间的情况下正常发送信号还是要发送信号时必须进入内核空间?
2-如果它必须首先进入内核,要采取哪些步骤来做到这一点?
3-这些信号处理程序在哪里?它们存在于用户空间还是内核空间,默认信号处理程序呢?
4-进程何时收到信号?是否必须通过内核才能执行信号处理程序?
【问题讨论】:
-
如果应用程序的信号处理程序是“在内核中”,那么在任何 unix 系统上基本上都是零安全性,因为每个应用程序都可以通过将代码注入内核空间来将其设为信号处理程序。实际的信号发送机制在内核中,但实际的处理程序仍保留在它应该在的位置 - 用户空间。
-
我知道大多数信号处理程序都存在于用户空间中,但有没有例外?
-
不知道内核内部是否有任何信号使用。可能是,但我不确定这有什么必要,因为信号更多的是用于进程间的东西,而不是进程内的。
-
我认为定时器中断信号会在内核中。