LINUX.ORG.RU

Сигналы и exec


0

1

Доброго времени суток всем. Вопрос может быть немного туповатым, но интересным. В самом начале программы выставляю обработчики сигналов: SIGSEGV, SIGABRT, SIGTERM. В обработчике исполняю execl самого себя, тем самым пытаюсь добиться в случае шухера перезагрузку программы. Когда процесс получает сигнал SIGSEGV(SIGTERM, SIGABRT), он добросовестно исполняет execl. Но в следующий раз, уже этот сигнал не получает. В чем может быть причина столь интересного поведения?

Покурил литературу по этому вопросу, соответственно покурил и гугл, но ответа пока не нашел. Мне кажется, что сигнал блокируется, но в POSIX указано, что исполняя exec соответственно сбрасываются обработчики на значения по дефолту (но, повторюсь, в самом начале программы выставляю обработчики). Пробовал форкаться - результат не изменился.

попробуй exec делать не в обработчике. И вообще, делать что-то чреватое побочными эффектами внутри обработчика - это.. кхм... плохо.

anonymous
()

> в POSIX указано, что исполняя exec соответственно сбрасываются обработчики на значения по дефолту

Зато «The new process shall inherit... Process signal mask». Либо устанавливай обработчик сигналов так, чтобы он не блокировал сигнал, либо явно разблокируй перед exec. Я бы второе сделал.

const86 ★★★★★
()
Ответ на: комментарий от PastorOff

лучше выставь глобальный флаг и где-нибудь в другом месте делай exec. Насчёт signal mask тоже неплохая идея, кстати.

anonymous
()
Ответ на: комментарий от const86

Спасибочки большое. Оказалась виной маска сигнала. Второе - сработало.

PastorOff
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.