Как сделать очистку после SIGKILL?

Я работаю над программой, которая использует общую память. Несколько экземпляров упомянутой программы или соединятся с существующей или создадут ее снова и отдадут ее к ОС, когда не будет никаких других процессов или просто не отсоединят ее и оконечный. Я думал об использовании простого в противоречии с, отслеживают то, сколько процессов использует его.

Я использую atexit() функция, чтобы сделать очистку, однако, afaik, после получения сигнала SIGKILL, процессы не сделают никакой очистки, поэтому если какой-либо из тех процессов не будет обычно завершаться, я никогда не мог бы мочь убрать память.

Существует ли способ указать, что сделать даже после сигнала SIGKILL? Я, вероятно, собираюсь записать некоторый механизм, подобный таймеру, чтобы проверить, живы ли процессы все еще, но я действительно хотел бы избежать его, если существует иначе.

9
задан Lightness Races with Monica 25 July 2011 в 01:53
поделиться

2 ответа

Нет, SIGKILL никаким образом не может быть перехвачен вашим приложением - если бы мог, то приложение может проигнорировать его, что нарушит его цель.

17
ответ дан 4 December 2019 в 06:40
поделиться

Вы не можете поймать SIGKILL.

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

Например: у вас может быть сокет домена Unix в известном месте, которое прослушивает экономка; каждый подчиненный процесс открывает сокет, чтобы указать, что он использует сегмент разделяемой памяти. Когда подчиненное устройство завершает работу по какой-либо причине, сокет закрывается. Домработница видит, как это происходит, и может сделать уборку.

14
ответ дан 4 December 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: