Из вопроса:
Хорошая практика программирования для использования setjmp и longjmp в C?
Два комментария остались:
"Вы не можете генерировать исключение в обработчике сигналов, но вы можете сделать longjmp безопасно - пока вы знаете, что делаете. - Дитрих Epp 31 августа в 19:57 @Dietrich: +1 к вашему комментарию. Это малоизвестный и полностью недооцененный факт. Существует ряд проблем, которые не могут быть решены (неприятные условия гонки) без использования longjmp из обработчики сигналов. Асинхронное прерывание блокировки системных вызовов - это классический пример".
У меня создалось впечатление, что обработчики сигналов вызывались ядром, когда он сталкивался с исключительным условием (например, делением на 0). Кроме того, они вызываются, только если вы их зарегистрируете.
Это, по-видимому, подразумевает (для меня), что они не вызываются через ваш обычный код.
Перейдя к этой мысли... setjmp и longjmp, как я их понимаю, предназначены для свертывания стека к предыдущей точке и состоянию. Я не понимаю, как вы можете свернуть стек, когда обработчик сигнала вызывается с момента его вызова из ядра как одноразовое обстоятельство, а не из вашего собственного кода. Какая следующая вещь в стеке от обработчика сигнала??