Как и когда удаляются файлы поддержки общей памяти в Linux? - PullRequest
2 голосов
/ 25 сентября 2011

Я использую комбинацию shm_open() и mmap() для создания сегмента общей памяти для IPC. Что мне интересно, так это то, как очищаются файлы поддержки (в /dev/shm в моей системе, ядро ​​Linux 2.6.31).

У меня три вопроса:

1) Процесс несет ответственность за удаление файлов после завершения? Если так, то что, если процесс умирает, прежде чем он их не связывает?

2) Поскольку я подозреваю, что ответ на вопрос № 1 «да, это ответственность программы», считается ли это «хорошей практикой» для моей программы удалять все устаревшие файлы, которые она замечает, перед созданием нового, в случае, если предыдущие экземпляры нечисто умер?

3) Есть ли способ попросить ядро ​​удалить файл резервной копии после того, как последний процесс освободит память? Я думаю о чем-то похожем на shmctl(id, IPC_RMID, ...) в разделяемой памяти в стиле SysV.

1 Ответ

3 голосов
/ 25 сентября 2011

Ответы следующие:

  1. Да, это ответственность программы, хотя может быть возможно обеспечить очистку, см. Мой ответ на вопрос 3.

  2. Вы можете удалить устаревшие файлы. Вы также можете просто использовать существующий объект совместно используемой памяти (который я предполагаю, что вы собираетесь воссоздать в любом случае).

  3. Если вы знаете, что другие пользователи для общего раздела не будут существовать после его первоначального создания, вы можете использовать shm_unlink сразу после сопоставления вашей общей памяти. Область памяти будет освобождена, как только все пользователи снимут (и закроют) ее.

...