我正在编写一个多线程程序,希望能够处理用户可能发出的Ctrl-C命令以终止执行。据我所知,并没有保证主线程能够捕获到该信号,尽管主线程可以取消每个工作线程。因此,是否需要在工作线程的代码中设置不同的信号处理程序,以便任何人都能在信号到达时捕获它,或者是否有其他方法只在主线程的代码中设置信号处理程序就能实现这一点?
您可以使用pthread_sigmask()来阻止来自调用线程的信号。 而且,由于被阻止的信号会被新创建的线程继承,因此您可以在主线程中阻止SIGINT信号,然后启动其他线程,如果需要的话,可以在主线程中取消阻止。
pthread_sigmask()
)永远不会接收到信号——这与线程捕获并忽略信号是不同的。如果除了主线程以外的所有线程都已经阻塞了SIGINT
,那么它将始终被传递到主线程。 - caf