Мне нужно обработать SIGSEGV в моем приложении Linux. Причиной является некоторая очистка (3-partry lib), которая должна быть выполнена перед генерированием дампа ядра. Более того, очистка должна выполняться в контексте вызывающего потока, не может выполняться в обработчике сигналов. Итак, я планирую обработчик сигнала передать управление вызывающему потоку после завершения очистки, а затем использовать raise (SIGSEGV) для создания ядро-дампа.ручка SIGSEGV в Linux?
Реальная проблема заключается в том, что signal_handler не может передать управление вызывающей нити, независимо от того, я использую post_sem или некоторые другие. Любая идея справиться с этим делом? Возможно, захватить SIGSEGV, а затем в SIGSEGV hander вернуться в другой поток, чтобы выполнить некоторую очистку?
сигнал (SIGSEGV, signal_handler);
signal_handler() { ... post_sem(); ... }
вызывающий поток() { wait_sem(); clean_up(); ... }
Метод, который вы описали, на самом деле является самым близким к действительным. 'sem_post' (версия POSIX) требуется стандартом для обеспечения безопасности по асинхронному сигналу. –