【问题标题】:Delivery of Signal after sigprocmasksigprocmask 后的信号传递
【发布时间】:2018-10-16 02:26:01
【问题描述】:

我的印象是,使用sigprocmask() 解除对信号的阻塞会导致待处理的阻塞信号被传递给进程。

sigprocmask()用于解除阻塞信号的特定情况下,如果有一个挂起的信号(比如SIGUSR1)已经被解除阻塞,信号SIGUSR1是否会通过调用@传递给进程987654325@ 在保持SIGUSR1 畅通的同时解除对不同信号的阻隔?

【问题讨论】:

    标签: signals sigprocmask


    【解决方案1】:

    要彻底理解它,我们需要了解信号在 linux 中是如何生成和传递的。

    当内核收到任何信号请求时,它会为进程设置信号挂起标志,前提是信号未被阻塞。现在,在返回用户模式之前,内核检查是否存在用于进程的非阻塞挂起信号。如果是,那么内核更愿意在返回用户模式之前传递该信号。 现在来回答你的问题:

    如果有一个挂起的信号(比如 SIGUSR1)已经被解除阻塞,

    我假设信号(SIGUSR1)首先被阻塞,然后被解除阻塞。在这种情况下,当用户尝试解除对信号的阻塞时,将在用户进程以用户模式恢复之前传递信号。例如。如果sigprocmask() 用于解除信号阻塞,则信号将在sigprocmask() 返回之前传递。

    信号 SIGUSR1 是否会通过调用传递给进程 sigprocmask() 在保持 SIGUSR1 的同时解除阻塞不同的信号 畅通无阻?

    如果多个挂起的信号被解除阻塞并准备好传递,那么内核会选择信号号最低的信号(当然,同步信号比异步信号具有更高的优先级)首先传递。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 2021-08-28
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多