我正在编写一个多线程程序,我想从用户处理一个可能的 Ctrl-C 命令来终止执行。据我所知,无法保证能够取消每个工作线程的主线程将捕获信号。因此,是否有必要对工作线程的代码使用不同的信号处理程序,以便任何人在信号到达时捕获信号,或者是否有其他方法通过仅在主线程的代码中使用信号处理程序来执行此操作?
答案 0 :(得分:8)
您可以使用pthread_sigmask()阻止来自调用线程的信号。
并且,由于被阻塞的信号被继承到新创建的线程,你可以在主线程中阻止SIGINT,然后启动你的其他线程,然后在主线程中取消阻塞它,如果这是可取的。