Как бороться с SIGINT?

Когда я ловлю сигнал SIGINT в своей программе, как я могу безопасно очистить ресурсы? В функции обработчика сигнала невозможно вызвать delete оператор, потому что я не знаю, как освободить ресурс, созданный с new оператор.

Есть идеи?

2 ответа

Решение

Если ваше приложение закрывается, не беспокойтесь о памяти. ОС собирается выбросить все это, как только вы все равно прекратите работу.

Вещи, которые вам нужно очистить в обработчике сигналов, - это то, что в противном случае переживет ваш процесс - например, если созданный вами дочерний процесс также должен завершиться, вы должны сказать ему об этом.

Как правило, вы вообще не хотите ничего делать в своем обработчике сигналов, кроме как установить логический флаг, на который будет реагировать какая-то другая часть вашей программы, как правило, вызывая падение некоторых циклов и позволяя привычному подходу упорядоченно завершить работу. Использовать в случаях, не связанных с сигналами. Причина использования этого флага для координации выключения заключается в том, что некоторые библиотечные функции избегают компромиссов, необходимых для безопасного повторного входа во время обработки асинхронных сигналов. Даже некоторые поточно-ориентированные функции, использующие специфичную для потока память, могут не справиться с асинхронным повторным входом. Быстрый поиск нашел некоторое обсуждение безопасных функций на http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch10lev1sec6.html.

Другие вопросы по тегам