Lig*_*ica 8 c++ pthreads boost-thread
在我的应用程序中,我通常想要拦截SIGINT和SIGTERM发出信号以便优雅地关闭.
为了防止工作线程"窃取"信号,我在每个的入口点执行此操作:
// Block signals in this thread
sigset_t signal_set;
sigaddset(&signal_set, SIGINT);
sigaddset(&signal_set, SIGTERM);
sigaddset(&signal_set, SIGHUP);
sigaddset(&signal_set, SIGPIPE);
pthread_sigmask(SIG_BLOCK, &signal_set, NULL);
Run Code Online (Sandbox Code Playgroud)
如果我没有,当我执行Ctrl+时C,有些时候(未指定哪个线程将获得信号)我的基本线程中的处理程序将不会被调用 - 相反,信号只是从内部终止进程工人线程.这显然不酷.
所以我在其他地方有一个信号处理线程和阻塞信号.
但是,我没有注意到其他任何人这样做,忘记这样做很容易,而且它也不是完全可移植的.是否有一些我想念的更简单的技巧?
参考文献:
我发现这是完全合理的事情.
在main生成任何其他线程之前,您可以阻止信号.生成的线程将继承创建者线程信号掩码,您只能在信号处理线程中解除阻塞信号(只有当该线程产生其他线程时才要小心).
或者你可以让信号在任何地方都被阻止,并通过sigwait信号处理线程中的朋友明确地处理它们.