Вы должны различать два сигнала: те, которые сообщают демону «перезагрузить», и те, которые завершают работу демона («убить»). В случае «убить» вам не нужно ничего освобождать. Ваш процесс умрет, ОС очистит все, что вы выделили. Если вы используете разделяемую память, вы должны выполнить очистку при повторном запуске. Не делайте в обработчике «kill» ничего, что могло бы вызвать проблемы. Просто умри.
В случае перезагрузки вы можете вызывать любую функцию, которая вам нравится, так как пользователь хочет, чтобы вы "выключились по порядку". В этом случае маловероятно, что вы снова получите тот же сигнал (поэтому не имеет значения, является ли функция реентерабельной).