多久采取非阻断信号获取传递?(How long does it take for a non-blo

2019-09-20 11:18发布

  1. 当一个进程将信号发送到另一个进程,在什么情况下不接受处理等待,直到它被重新安排运行?
  2. 在什么情况下不安装的信号处理程序得到立即调用?
  3. 多少开销相比,只是直接调用相应的信号处理程序发出信号何时过程中承担?

Answer 1:

关于交付的信号,TLPI指出,信号“正常”从内核模式切换到用户模式时,交货时任务下次计划,或“立即”当任务已经运行(大概是“立即”将不得不通过发生第一发射中断,所以否则怎么能做到这一点)。 好吧,不管这意味着,它不是严格约束,但它是非常接近发生了什么。

你有实时和“正常”的信号,以及被同步生成“正常”的信号,大部分的时间,因为硬件事件(例如分段故障)和那些之间不区分(他们asnychronously genereated )。

实时信号进行排队 ,正常信号不是 。 这意味着,正常信号的执行是最有可能的只是类似的东西作为一个位掩码每个任务的单词。
生成一个“正常”的信号,意味着设置了一下,当OS未来决定是否有信号被传递,它测试对零字,并在必要时计算出其位(S)分别设置,并调用信号处理程序(一个或多个),如果有的话,相应。
为什么需要知道这一点的唯一实际的原因是因为它是可能的“输”的信号。 如果第一个交付之前产生两个或多个信号,它仍然只是一个信号产品总数。

实时信号(其被要求排队的实现相关的长度)的执行是显然要复杂得多。

这种情况发生因为硬件事件(例如段错误)的信号同步生成,以同样的方式好象叫过程中kill本身(章22.4 TLPI),即它们是“立即”,提供有两个原因。 首先,它没有任何意义做其它的事情,和第二已经有一个内核/用户开关发生陷阱处理程序返回时。 所以交付始终是“立即”反正。



Answer 2:

基本上,信号是异步的。 他们依靠信号处理程序来执行代码时,接收到信号,因为你永远不知道什么时候,这将是由于一些因素,如进程调度。 发送的信号的延迟是基于所述硬件/软件中断,它是基于时钟速度。

如果你想了解的东西是如何在Linux上执行,检查POSIX标准。

对信号产生很大的信息:

http://www.gnu.org/software/libc/manual/html_node/index.html#toc_Signal-Handling

当产生信号时,它等待处理 。 通常情况下它仍然是时间仅在短时间内挂起,然后传递到了信号的过程。 但是,如果那样的信号的当前被阻塞 ,也可能无限期地保持未决-直到该种信号是畅通 。 一旦畅通,它将被立即传递。

另摘录:

当信号被交付,是否马上或长的延迟之后,该信号规定采取行动



文章来源: How long does it take for a non-blocked signal get delivered?
标签: linux signals