gpt4 book ai didi

linux - 使用 sigmask 将信号传递给多线程程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:29 24 4
gpt4 key购买 nike

如果我有一个程序有 N 个正在运行的线程,并且其中的 N-1 使用 pthread_sigmask 阻止了 SIGUSR1 信号的传递:

int rc;
sigset_t signal_mask;
sigemptyset(&signal_mask);
sigaddset(&signal_mask, SIGUSR1);
rc = pthread_sigmask(SIG_BLOCK, &signal_mask, NULL);
if (rc != 0) {
// handle error
}

当操作系统(Linux,最近的内核)向进程传递 SIGUSR1 时,是否保证传递给未阻塞的线程?或者它可以,例如,尝试一些被阻塞线程的子集然后放弃吗?

最佳答案

是的,可以保证进程控制的信号将被传递到其中一个已解除阻塞的线程(如果有的话)。 POSIX的相关引述Signal Generation and Delivery :

Signals generated for the process shall be delivered to exactly one of those threads within the process which is in a call to a sigwait() function selecting that signal or has not blocked delivery of the signal.

关于linux - 使用 sigmask 将信号传递给多线程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19594823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com