57 votes

Référence pour le traitement correct du fichier PID sous Unix

Où puis-je trouver un bien-respecté de référence que les détails de la manipulation de fichiers PID sur Unix?

Sur les systèmes d'exploitation Unix, il est de pratique courante de "verrouiller" un programme (souvent un démon) par l'utilisation d'une serrure spéciale fichier: le fichier PID.

C'est un fichier dans un emplacement prévisible, souvent " /var/run/foo.pid". Le programme est censé vérifier lorsqu'il démarre si le fichier PID existe et, si le fichier n'existe pas, à la sortie avec une erreur. C'est donc une sorte de conseil, de collaboration mécanisme de verrouillage.

Le fichier contient une seule ligne de texte, étant le numérique IDENTIFIANT de processus (d'où le nom de "fichier PID") du processus qui détient actuellement la serrure, ce qui permet un moyen facile d'automatiser l'envoi d'un signal au processus qui détient le verrou.

Ce que je ne peux pas trouver une bonne référence sur les attentes ou les "meilleures pratiques" de comportement pour la manipulation des fichiers PID. Il y a des nuances diverses: comment verrouiller le fichier (ne te dérange pas? utiliser le noyau? quel sujet de la plate-forme des incompatibilités?), la manipulation de verrous périmés (silencieusement les supprimer? quand vérifier?), quand exactement d'acquérir et de libérer le verrou, et ainsi de suite.

Où puis-je trouver un respectés, plus de référence (de préférence sur le niveau de W. Richard Stevens) pour ce petit sujet?

21voto

Joshua Points 13231

Tout d'abord, sur tous les systèmes Unix /var/run ne persiste pas après un redémarrage.

La méthode générale de la manipulation du fichier PID est de le créer lors de l'initialisation et de la supprimer de sortie, normal ou gestionnaire de signal.

Il y a deux canonique des moyens de atomiquement créer/vérifier le fichier. Le principal de ces journées est de l'ouvrir avec l' O_EXCL drapeau: si le fichier existe déjà, l'appel échoue. À l'ancienne (obligatoire sur les systèmes sans O_EXCL) est de créer avec un nom aléatoire et un lien vers elle. Le lien échoue si la cible existe.

17voto

Josh Kelley Points 24438

Autant que je sache, les fichiers PID sont une convention plutôt que quelque chose que vous pouvez trouver un respectés, surtout source faisant autorité pour. Le plus proche que j'ai pu trouver est cette section de la Hiérarchie du système de fichiers Standard.

Cette bibliothèque Perl peut être utile, car on dirait que l'auteur a au moins réfléchi à certaines questions que peuvent se poser.

Je crois que les fichiers dans /var/run sont souvent prises en charge par la distrib responsables plutôt que de démons auteurs, puisque c'est la distro responsables de " responsabilité de veiller à ce que tous les scripts d'initialisation jouer bien ensemble. J'ai vérifié Debian et Fedora documentation pour les développeurs et ne pouvais pas trouver toutes les lignes directrices, mais vous pourriez être en mesure d'obtenir plus d'infos sur leur développeurs listes de diffusion.

11voto

John Hammond Points 106

Voir Kerrisk de Linux, l'Interface de Programmation, section de 55,6 à"exécuter une seule Instance d'un Programme" qui est basé sur le pidfile mise en œuvre de Stevens' Unix, Programmation Réseau, v2.

Notez également que l'emplacement de la pidfile est habituellement traitée par la distribution (via un script d'initialisation), tellement bien écrit démon va prendre un argument de ligne de commande pour spécifier le pidfile et ne pas permettre que cela soit accidentellement remplacé par un fichier de configuration. Il convient également de traiter un état du fichier pid par lui-même (O_EXCL ne doit pas être utilisé). fcntl() de verrouillage de fichier doit être utilisée, vous pouvez supposer que un démon du pidfile est situé sur un local (non-NFS) système de fichiers.

7voto

Tim Post Points 21270

Selon la distribution, sa en fait le script d'initialisation qui gère le pidfile. Il vérifie l'existence au départ, supprime lors de l'arrêt, etc. Je n'aime pas faire de cette façon. J'écris mes propres scripts d'initialisation et de ne pas utiliser généralement les stanard fonctions d'initialisation.

Un bien écrit, programme (démon) auront une sorte de fichier de configuration de dire où cette pidfile (le cas échéant) doit être écrit. Il prendra également soin d'établir les gestionnaires de signaux, de sorte que le fichier PID est nettoyée sur normal ou anormal de sortie, à chaque fois qu'un signal peut être manipulé. Le fichier PID donne ensuite le script d'initialisation correcte PID de sorte qu'il peut être arrêté.

Par conséquent, si le pidfile existe déjà lors du démarrage, c'est un très bon indicateur pour le programme qu'il a précédemment s'est écrasé, et devrait faire une sorte de récupération de l'effort (le cas échéant). Vous sorte de tirer de cette logique dans le pied, si vous avez le script lui-même la vérification de l'existence de la PID, ou de dissociation.

Aussi loin que l'espace de nom, il doit suivre le nom du programme. Si vous êtes partant " de la nourriture (foo démon), il serait de la nourriture.pid

Vous devriez également explorer /var/lock/subsys, cependant, c'est principalement utilisée sur Red Hat saveurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X