De nombreux programmes tels que sshd créent des fichiers .pid dans / var / run / qui contiennent leur ID de processus. Ces fichiers sont-ils fiables pour déterminer si un processus est en cours d'exécution? Je suppose que ces fichiers sont créés manuellement par un processus et resteront donc toujours dans le système de fichiers si le programme plante.
11
Jldupont a raison de dire que les fichiers .pid ne sont pas fiables pour déterminer si un processus est en cours d'exécution car le fichier ne peut pas être supprimé en cas de plantage.
Mis à part les conditions de concurrence , j'utilise souvent pgrep lorsque j'ai besoin de savoir si un processus est en cours d'exécution. Je pourrais alors croiser la sortie avec le ou les fichiers .pid si je le jugeais nécessaire.
la source
Un fichier contenant un identifiant de processus n'est pas fiable. Déterminez si un processus est en cours d'exécution ou non. C'est juste une source fiable pour déterminer le dernier identifiant de processus donné pour le processus.
Lorsque vous avez l'ID de processus, vous devez vérifier plus avant, si le processus est réellement en cours d'exécution.
Voici un exemple:
pgrep est une belle commande, mais vous aurez des ennuis lorsque vous aurez plusieurs instances en cours d'exécution. Par exemple, lorsque vous avez un sshd standard en cours d'exécution sur le port TCP / 22 et que vous avez un autre sshd en cours d'exécution sur le port TCP / 2222, pgrep fournira deux identifiants de processus lors de la recherche de sshd ... lorsque le sshd normal a son pid dans / var /run/sshd.pid et l'autre pourrait avoir son pid dans /var/run/sshd-other.pid vous pouvez clairement différencier les processus.
Je ne recommande pas d' utiliser uniquement ps , de passer par un ou plusieurs tuyaux avec grep et grep -v en essayant de filtrer toutes les autres choses qui ne vous intéressent pas ... c'est un peu comme utiliser
pour savoir si un fichier se termine.
la source
Il n'est pas fiable de vérifier simplement l'existence d'un processus avec le même pid que celui contenu dans le fichier.
Mais de nombreuses implémentations de pidfile verrouillent également le pidfile, de sorte que si le processus se termine, le verrou disparaît. Pourvu que le mécanisme de verrouillage soit fiable, vérifier si le fichier est toujours verrouillé est un mécanisme relativement fiable pour déterminer si le processus d'origine est toujours en cours d'exécution.
la source
Jldupont a raison.
Vous pouvez cependant envoyer au processus un signal 0 (kill -s 0 pid) pour voir si le processus est toujours en vie (en supposant que vous avez le pouvoir d'envoyer un tel signal - en général, seul le propriétaire d'un processus peut envoyer c'est un signal).
la source
Je suis d'accord avec jschmier.
Sur certains systèmes, vous n'avez pas accès à pgrep. Dans un tel cas, vous pouvez faire
ps -aef | grep <pid>
pour savoir si le processus est réellement en cours d'exécution.la source