2011-03-10 6 views
1

Quelle est la meilleure façon linux de stocker une valeur associée à un processus.processus linux localstorage

Nous avons une bibliothèque que nous chargeons et déchargons dynamiquement. En cours d'exécution, la bibliothèque va créer une grande structure de données .... environ 1Go. Lorsque la bibliothèque est déchargée, elle quitte cette structure de données dans la mémoire du processus. Lorsque le processus recharge la bibliothèque, nous avons besoin de la bibliothèque pour pouvoir trouver l'adresse de cette structure de données. Nous faisons cela parce que les mises à jour de notre logiciel serveur se produisent en temps réel et ne peuvent pas se permettre le temps de créer cette structure de données. Nous ne sommes pas non plus mis à jour lorsqu'une mise à jour échoue, ce qui nous permet de revenir rapidement à une version précédente. Nous n'avons pas la possibilité de changer le code de l'application appelante afin qu'elle puisse nous transmettre l'adresse de la structure de données.

pthreads a un stockage local de thread. Je cherche quelque chose d'analogue au stockage local de fil sauf que ce serait le stockage local de processus. Je ne veux pas créer un fichier dans un répertoire temporaire car nos serveurs se bloquent et redémarrent de temps en temps ... Je ne veux pas avoir à nettoyer les fichiers de données de processus morts. Je regardais le /proc/ directory, ce qui serait idéal car il disparaît après la fin d'un processus, mais je ne suis pas certain que les fonctions de proc_fs.h soient appelées à partir d'une application utilisateur.

Merci!

+0

Je suis allé avec la variable d'environnement! – johnnycrash

Répondre

2

L'exécutable qui charge la bibliothèque ne peut pas simplement garder ceci pour vous, et le transmettre après avoir chargé la bibliothèque?

Quoi qu'il en soit, certaines alternatives sont:

  • balayage /proc/self/maps pour les données - selon la façon dont vous avez alloué elle.
  • Ouvrez un fichier, dup2() à un "magique" fd, rm le fichier, puis écrivez vos données d'état. Il va disparaître complètement lorsqu'il est fermé.
  • Chargez une bibliothèque minuscule qui a pour seul but de stocker cette adresse pour vous. dlopen() encore lorsqu'il est rechargé, et lui demander l'adresse.
  • Set/lecture variable d'environnement

Personnellement je partirais avec la variable d'environnement.

+0

L'exe * pourrait éventuellement être modifié pour ce faire, mais ce trou de lapin n'a pas de fin .... – johnnycrash

+0

Ensuite, allez avec l'environnement. Etat local du processus. – Erik

+0

Je vérifie dans/proc/self/maps et l'idée dup2. La méthode multi-bibliothèques est actuellement implémentée mais elle a des problèmes. – johnnycrash