Казалось бы, что реализация raise(sig)
сбрасывает обработчик, установленный с signal(sig, handlerFunction)
, то есть, в многопоточной программе, первый поток для вызова abort()
будет называть пользовательские handlerFunction
, но если какие-либо другие потоки, то вызовы прерывания, это другое поток просто вызовет exit(3)
.(Почему) поднимает сброс обработчика сигнала?
0
A
ответ
0
По-видимому, поведение сигнала + рейз определяется как таковое. Из статьи Википедии на sigaction
:
... замена ненадежных и осуждается
signal()
функцию. Сигналы обработчики, установленные интерфейсомsignal()
, будут удалены непосредственно перед выполнением обработчика. Постоянные обработчики должны поэтому переустанавливать вызовомsignal()
во время выполнения обработчика, в результате чего ...
Так, кажется, это ожидаемое поведение. (Конечно, документы MSDN, похоже, полностью не упоминают об этом.)
Вопрос здесь на SO: What is the difference between sigaction and signal?