如果我为SIGABRT设置和信号处理程序,同时我有一个线程在SIGBRT上等待sigwait()(我通过pthread_sigmask在其他线程中有一个阻塞的SIGABRT).
那么首先处理哪一个?信号处理程序或sigwait()?
[我正面临一些问题,sigwait()永远被阻止.我正在调试它]
main() { sigset_t signal_set; sigemptyset(&signal_set); sigaddset(&signal_set, SIGABRT); sigprocmask(SIG_BLOCK, &signal_set, NULL); // Dont deliver SIGABORT while running this thread and it's kids. pthread_sigmask(SIG_BLOCK, &signal_set, NULL); pthread_create(&tAbortWaitThread, NULL, WaitForAbortThread, NULL); .. Create all other threads ... } static void* WaitForAbortThread(void* v) { sigset_t signal_set; int stat; int sig; sigfillset( &signal_set); pthread_sigmask( SIG_BLOCK, &signal_set, NULL ); // Dont want any signals sigemptyset(&signal_set); sigaddset(&signal_set, SIGABRT); // Add only SIGABRT // This thread while executing , will handle the SIGABORT signal via signal handler. pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL); stat= sigwait( &signal_set, &sig ); // lets wait for signal handled in CatchAbort(). while (stat == -1) { stat= sigwait( &signal_set, &sig ); } TellAllThreadsWeAreGoingDown(); sleep(10); return null; } // Abort signal handler executed via sigaction(). static void CatchAbort(int i, siginfo_t* info, void* v) { sleep(20); // Dont return , hold on till the other threads are down. }
在sigwait(),我会知道收到了SIGABRT.我将告诉其他线程.然后将保持中止信号处理程序,以便不终止进程.
我想知道sigwait()和信号处理程序的交互.