локальный процесс Linux - PullRequest
1 голос
/ 10 марта 2011

Каков наилучший способ Linux сохранить значение, связанное с процессом.

У нас есть библиотека, которую мы динамически загружаем и выгружаем.Во время работы библиотека создаст большую структуру данных .... около 1 ГБ.Когда библиотека выгружается, она оставляет эту структуру данных в памяти процесса.Когда процесс перезагружает библиотеку, нам нужно, чтобы библиотека смогла найти адрес этой структуры данных.Мы делаем это потому, что обновления нашего серверного программного обеспечения происходят в режиме реального времени и не могут позволить себе время для создания этой структуры данных.мы также не обновляемся, когда обновление завершается неудачно, поэтому это позволяет нам быстро вернуться к предыдущей версии.У нас нет возможности изменить код вызывающего приложения, чтобы оно могло передать нам адрес структуры данных.

pthreads имеет локальное хранилище потока.Я ищу что-то аналогичное локальному хранилищу потока, за исключением того, что это будет локальное хранилище процесса.Я не хочу создавать файл во временном каталоге, потому что наши серверы время от времени перезагружаются и перезагружаются ... Я не хочу иметь дело с необходимостью очистки файлов данных мертвых процессов.Я смотрел на каталог / proc / , который был бы идеальным, поскольку он исчезает после завершения процесса, но я не уверен, что функции внутри proc_fs.h должны вызываться из приложения пользователя-пользователя.

Спасибо!

1 Ответ

2 голосов
/ 10 марта 2011

Исполняемый файл, который загружает библиотеку, не может просто сохранить это для вас и передать его после загрузки библиотеки?

В любом случае, некоторые альтернативы:

  • Сканировать /proc/self/maps для данных - в зависимости от того, как вы их распределили.
  • Откройте файл, dup2() это «магический» файл, затем файл, а затем запишите в него данные о вашем состоянии.Когда он закроется, он полностью исчезнет.
  • Загрузите крошечную библиотеку, единственная цель которой сохранить этот адрес для вас.dlopen() снова при перезагрузке и запросите адрес.
  • Установите / прочитайте переменную окружения

Лично я бы пошел с переменной окружения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...