web-dev-qa-db-fra.com

À quoi servent les fichiers pid et lock?

Je vois souvent que les programmes spécifient les fichiers pid et lock. Et je ne sais pas trop ce qu'ils font.

Par exemple, lors de la compilation de nginx:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

Quelqu'un peut-il faire la lumière sur celui-ci?

80
Stann

les fichiers pid sont écrits par certains programmes pour enregistrer leur ID de processus au démarrage. Cela a plusieurs objectifs:

  • C'est un signal aux autres processus et utilisateurs du système que ce programme particulier est en cours d'exécution, ou au moins démarré avec succès.
  • Il permet d'écrire un script très facile à vérifier s'il est en cours d'exécution et d'émettre une simple commande kill si l'on veut y mettre fin.
  • C'est un moyen bon marché pour un programme de voir si une précédente instance en cours d'exécution ne s'est pas terminée correctement.

La simple présence d'un fichier pid ne garantit pas que cet ID de processus particulier fonctionne, bien sûr, donc cette méthode n'est pas infaillible à 100% mais "assez bonne" dans de nombreux cas. Vérifier si un PID particulier existe dans la table de processus n'est pas totalement portable sur des systèmes d'exploitation de type UNIX, sauf si vous voulez dépendre de l'utilitaire ps, qui peut ne pas être souhaitable d'appeler dans tous les cas (et je crois certains systèmes d'exploitation de type UNIX implémentent de toute façon ps différemment).

Les fichiers de verrouillage sont utilisés par les programmes pour garantir que deux instances distinctes (correctes) d'un programme, qui peuvent s'exécuter simultanément sur un système, n'accèdent pas à autre chose en même temps. L'idée est avant que le programme n'accède à sa ressource, il vérifie la présence d'un fichier de verrouillage, et si le fichier de verrouillage existe, soit une erreur soit soit attend qu'il disparaisse. Lorsqu'il n'existe pas, le programme voulant "acquérir" la ressource crée le fichier, puis d'autres instances qui pourraient apparaître plus tard attendront que ce processus soit terminé avec lui. Bien sûr, cela suppose que le programme "acquérant" le verrou le libère et n'oublie pas de supprimer le fichier de verrouillage.

Cela fonctionne parce que le système de fichiers sous tous les systèmes d'exploitation de type UNIX applique sérialisation, ce qui signifie qu'une seule modification du système de fichiers se produit à un moment donné. Un peu comme des verrous avec des bases de données et autres.

90
LawrenceC

Ces fichiers sont souvent utilisés par des démons qui ne doivent être exécutés qu'une seule fois sur un système. Le fichier PID contient généralement le numéro d'identification du processus du programme déjà lancé et en cours d'exécution, s'il en existe un. De plus, au démarrage, il crée le fichier de verrouillage. Tant que le fichier de verrouillage existe, il ne démarre pas un autre sans intervention de l'utilisateur. Si le fichier de verrouillage existe et que l'ID de processus mentionné dans le fichier pid n'est pas en cours d'exécution, le démon est considéré comme étant dans un état "mort", ce qui signifie qu'il est censé être en cours d'exécution mais n'est probablement pas dû à un crash ou à un arrêt incorrect. . Cela peut déclencher un scénario spécial de démarrage/redémarrage pour certains programmes. L'arrêter correctement supprimera le fichier de verrouillage.

14
Caleb

Un fichier PID contiendra l'ID de processus d'un processus en cours d'exécution. Cela a diverses utilisations; vous pouvez le lire et vérifier que le processus est toujours en cours d'exécution et prendre les mesures appropriées ou le lire et tuer le processus.

Un fichier de verrouillage est très probablement spécifique à l'application. Les fichiers de verrouillage sont utilisés pour indiquer qu'une ressource est en cours d'utilisation et que le processus qui souhaite accéder doit attendre que la ressource soit libérée avant de continuer.

8
user591