sigprocmask 后的信号传递
Delivery of Signal after sigprocmask
我的印象是使用 sigprocmask()
解锁信号会导致待处理的阻塞信号被传送到进程。
在使用sigprocmask()
解锁信号的特定情况下,如果有一个挂起的信号(比如SIGUSR1
)已经解锁,那么信号SIGUSR1
会被传送吗通过调用 sigprocmask()
来解除对不同信号的阻塞,同时保持 SIGUSR1
畅通?
要彻底理解它,我们需要了解信号是如何在 linux 中生成和传送的。
当内核收到任何信号请求时,它会为进程设置信号挂起标志,前提是信号未被阻止。现在,在返回到用户模式之前,内核会检查进程是否存在未阻塞的挂起信号。如果是,那么内核更愿意在返回用户模式之前传递该信号。
现在回答你的问题:
if there is a pending signal (say SIGUSR1) that is already unblocked,
我假设 signal(SIGUSR1) 首先被阻塞,然后被解除阻塞。在这种情况下,当用户尝试解除阻塞信号时,信号将在用户进程在用户模式下恢复之前被传送。对于前。如果 sigprocmask()
用于解锁信号,那么信号甚至会在 sigprocmask()
returns.
之前传送
will the signal SIGUSR1 be delivered to the process with a call to
sigprocmask() that unblocks a different signal while keeping SIGUSR1
unblocked?
如果多个未决信号被解除阻塞并准备好传送,那么内核会选择信号编号最低的信号(当然,同步信号比异步信号具有更高的优先级)首先传送。
我的印象是使用 sigprocmask()
解锁信号会导致待处理的阻塞信号被传送到进程。
在使用sigprocmask()
解锁信号的特定情况下,如果有一个挂起的信号(比如SIGUSR1
)已经解锁,那么信号SIGUSR1
会被传送吗通过调用 sigprocmask()
来解除对不同信号的阻塞,同时保持 SIGUSR1
畅通?
要彻底理解它,我们需要了解信号是如何在 linux 中生成和传送的。
当内核收到任何信号请求时,它会为进程设置信号挂起标志,前提是信号未被阻止。现在,在返回到用户模式之前,内核会检查进程是否存在未阻塞的挂起信号。如果是,那么内核更愿意在返回用户模式之前传递该信号。 现在回答你的问题:
if there is a pending signal (say SIGUSR1) that is already unblocked,
我假设 signal(SIGUSR1) 首先被阻塞,然后被解除阻塞。在这种情况下,当用户尝试解除阻塞信号时,信号将在用户进程在用户模式下恢复之前被传送。对于前。如果 sigprocmask()
用于解锁信号,那么信号甚至会在 sigprocmask()
returns.
will the signal SIGUSR1 be delivered to the process with a call to sigprocmask() that unblocks a different signal while keeping SIGUSR1 unblocked?
如果多个未决信号被解除阻塞并准备好传送,那么内核会选择信号编号最低的信号(当然,同步信号比异步信号具有更高的优先级)首先传送。