Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 信号如何工作_Linux_Unix_Signals - Fatal编程技术网

Linux 信号如何工作

Linux 信号如何工作,linux,unix,signals,Linux,Unix,Signals,我研究信号已经有一段时间了,但我想了解它们到底是如何工作的,我需要一些关于这个问题的深入答案 例如,如果一个进程使用libc函数向另一个进程发送信号 1-该进程是否可以正常发送信号而不进入内核空间,或者当它想要发送信号时是否必须进入内核空间 2-如果必须首先进入内核,那么需要采取哪些步骤 3-这些信号处理器在哪里?它们是否存在于用户空间或内核空间中?默认信号处理程序如何 4-进程何时收到信号?它是否必须通过内核才能执行信号处理程序? 1发送信号最终由系统调用完成。所有系统调用都由内核执行 2不确

我研究信号已经有一段时间了,但我想了解它们到底是如何工作的,我需要一些关于这个问题的深入答案

例如,如果一个进程使用libc函数向另一个进程发送信号

1-该进程是否可以正常发送信号而不进入内核空间,或者当它想要发送信号时是否必须进入内核空间

2-如果必须首先进入内核,那么需要采取哪些步骤

3-这些信号处理器在哪里?它们是否存在于用户空间或内核空间中?默认信号处理程序如何

4-进程何时收到信号?它是否必须通过内核才能执行信号处理程序?

  • 1发送信号最终由系统调用完成。所有系统调用都由内核执行

  • 2不确定你想走多深。第一步是让内核确保允许您发送信号,最后一步是让内核自行处理或将信号发送到目标进程

  • 3除内核考虑的SIGSTOP和SIGKILL之外,大多数信号处理程序都在用户空间中

  • 4不,没有这样的要求。该过程忽略或处理该信号。处理程序是默认的或自定义的


如果一个应用程序的信号处理程序是“在内核中”,那么在任何unix系统上基本上都是零安全的,因为每个应用程序都可以通过将其设置为信号处理程序将代码注入内核空间。实际的信号发送机制在内核中,但实际的处理程序仍保留在它应该的位置-用户空间。我知道大多数信号处理程序都存在于用户空间中,但有例外吗?不知道内核中是否有任何信号使用。可能是的,但我不确定这有什么必要,因为信号更多的是进程间的东西,而不是进程内的东西。我认为计时器中断信号应该在内核中。好的,如果信号和sigaction系统调用不将信号处理程序写入内核,它们是如何工作的?我不确定你的意思是什么“将信号处理程序写入内核。信号处理程序保留在userland中,它是userland代码,而不是内核代码。
signal
sigaction
都在更新作为流程上下文一部分的表。发送到进程的信号也存储在此进程上下文中。当调度程序将CPU返回给进程时,它会检查是否需要发送信号。在这种情况下,目标进程可能会执行自定义处理程序。