2013-08-02 5 views
0

Казалось бы, что реализация raise(sig) сбрасывает обработчик, установленный с signal(sig, handlerFunction), то есть, в многопоточной программе, первый поток для вызова abort()будет называть пользовательские handlerFunction, но если какие-либо другие потоки, то вызовы прерывания, это другое поток просто вызовет exit(3).(Почему) поднимает сброс обработчика сигнала?

ответ

0

По-видимому, поведение сигнала + рейз определяется как таковое. Из статьи Википедии на sigaction:

... замена ненадежных и осуждается signal() функцию. Сигналы обработчики, установленные интерфейсом signal(), будут удалены непосредственно перед выполнением обработчика. Постоянные обработчики должны поэтому переустанавливать вызовом signal() во время выполнения обработчика, в результате чего ...

Так, кажется, это ожидаемое поведение. (Конечно, документы MSDN, похоже, полностью не упоминают об этом.)

Вопрос здесь на SO: What is the difference between sigaction and signal?