Поймать сигналы типа SIGSEGV и SIGFPE в многопоточной программе

Я пытаюсь написать многопоточную систему регистрации для программы, работающей на Linux.

Вызовы системы регистрации в основных потоках программы выдвигают структуру данных, содержащую данные, подлежащие регистрации, в очередь FIFO. Выделенный поток выбирает данные очереди и выводит данные, в то время как основной поток программы продолжает выполнять свою задачу.

Если основная программа вызывает SIGSEGV или другие сигналы, мне нужно убедиться, что очередь пуста до завершения.

Мой план состоит в том, чтобы заблокировать сигналы с помощью pthread_sigmaskhttp://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, но я не знаю, какие сигналы относятся к конкретным потокам и как их перехватить.

Ответы на вопрос(1)

Ваш ответ на вопрос