Вопрос
У меня есть система с более чем 10 потоками.У меня есть обработчик сигналов для перехвата SIGSEGV.если один поток генерирует SIGSEGV, передается ли этот сигнал всем потокам или только тому потоку, который сгенерировал сигнал?
Решение
SIGSEGV
является синхронным сигналом.Он будет доставлен в поток, который вызвал недопустимый доступ к памяти.От signal(7)
:
Сигнал может быть сгенерирован (и, следовательно, ожидаться) для процесса в целом (например,, при отправке с использованиемkill(2)
) или для определенного потока (например, определенных сигналов, таких какSIGSEGV
иSIGFPE
, генерируемых как следствие выполнения конкретного машина-язык инструкции резьбы направлена, как сигналы направлены на конкретный поток, используяpthread_kill(3)
).Сигнал, направленный процессом, может быть доставлен в любой из потоков, у которого в данный момент нет сигнала заблокирован.Если сигнал разблокирован более чем одним из потоков, то ядро выбирает произвольный поток, которому следует доставить сигнал.
Не связан с StackOverflow