我遇到了一些奇怪的事情,我想这可能是我不了解 Linux 中线程的复杂性。我使用 signal(SIGUSR1, &callback)
在我的子线程中注册了一个信号处理程序,并且在我的父线程中没有对信号进行特殊处理。每隔一段时间,我的子线程就会引发一个 SIGUSR1。但是,它在退出的主线程中导致未处理的信号错误。如何重现此行为?当我尝试使用测试程序进行重现时,只要在子线程中设置了信号处理程序,它总会被调用。
最佳答案
哦,混合信号和线程。这不是一个好主意。如果必须,将一个线程作为信号处理线程并使用 pthread_sigmask() 屏蔽所有其他线程。但是,如果您使用 SIGUSR1 作为线程间通信的一种形式,则有更好的方法(互斥锁和信号量)。
关于c++ - 什么会导致 SIGUSR1 未被设置了信号处理程序的子线程捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43331242/