如果我有一个运行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
}
当OS(Linux,最近的内核)将SIGUSR1传递给进程时,是否可以保证将其传递给未阻塞的线程?或者,例如,它可以尝试阻塞线程的某些子集然后放弃吗?
答案 0 :(得分:1)
是的,保证过程导向的信号将被传送到其中一个未被阻塞的线程(如果有的话)。 POSIX Signal Generation and Delivery的相关引用:
为该过程生成的信号应仅传递给其中一个 进程中调用
sigwait()
的那些线程 功能选择该信号或没有阻止交付 信号。