相关疑难解决方法(0)

在多线程程序中捕获SIGSEGV和SIGFPE等信号

我正在尝试为在linux上运行的程序编写多线程日志记录系统.

在主程序线程中调用日志记录系统会将包含要记录的数据的数据结构推送到FIFO队列中.专用线程选择队列的数据并输出数据,而程序主线程继续其任务.

如果主程序导致SIGSEGV或其他信号被引发,我需要在终止之前确保队列为空.

我的计划是使用pthread_sigmask http://man7.org/linux/man-pages/man3/pthread_sigmask.3.html阻止除一个线程之外的所有信号,但是在http://man7.org上读取信号列表/linux/man-pages/man7/signal.7.html我注意到:

可以为整个过程(例如,当使用kill(2)发送时)或针对特定线程(例如,某些信号,例如SIGSEGV和SIGFPE,>生成的信号)生成(并因此待决)信号执行特定机器语言指令的步骤是线程定向的,使用pthread_kill(3)的特定线程的信号也是如此.

如果我在所有线程上阻塞SIGSEGV但是一个专用于捕获信号的线程,那么它会捕获由不同线程引发的SIGSEGV吗?

在Linux中发现了使用多个线程进行信号处理的问题,但我对于哪些信号是特定于线程以及如何捕获它们一无所知.

c++ linux multithreading posix

6
推荐指数
1
解决办法
2238
查看次数

标签 统计

c++ ×1

linux ×1

multithreading ×1

posix ×1