Я не знаю Цель C, но у меня есть опыт работы с обработчиками сигналов, поэтому я отвечу так, как будто для POSIX и C.
Вызов любой функции, которая не задокументирована как "безопасная асинхронная передача сигналов"в обработчике сигналов есть риск и его следует избегать.Вы не можете делать какие-либо предположения о стеке или любом другом состоянии, когда вызывается обработчик сигнала.Стек может даже быть "уничтожен" (в процессе создания или уничтожения кадра), когда вызывается ваш обработчик сигнала.Ваши библиотеки могут иметь несовместимое состояние при вызове вашего обработчика сигнала.
Объявите флаг volatile (int), который проверяется в вашем цикле событий или что-то еще, чтобы увидеть, изменился ли он.Обработчик сигнала должен устанавливать ТОЛЬКО этот флаг и возвращать, больше ничего.(Если ваша платформа не передает сигналы в стиле SVR4, в этом случае вам также необходимо переустановить обработчик сигналов в обработчике сигналов.)
Сообщения журнала и другие действия в ответ на сигнал должны выполнятьсялюбой код проверяет флаг и обрабатывает событие, подразумеваемое флагом.
Симптомы, которые вы видите, могут быть вызваны не библиотечными вызовами в обработчике сигналов (мои деньги, честно говоря, будут связаны с взаимодействием с gdb), но яопределенно рекомендую убрать все вызовы библиотеки из обработчика сигнала.