/ Proc / PID peut-il toujours exister lorsque le PID n'est pas en cours d'exécution?

11

est-il possible qu'un dossier comme /proc/4587existe même s'il n'y a pas de processus qui a le PID 4587?

David Dai
la source
1
Vous vous demandez si la vérification de / proc / N est un moyen sûr / fiable de voir si le PID N est en cours d'exécution?
Andy Lester,
Je me demandais si théoriquement il pourrait y avoir des résidus dans / proc après la fin du processus.
David Dai

Réponses:

25

S'il /procne s'agit que du procmontage (et que personne ne joue des tours avec des superpositions), non, un dossier basé sur pid n'existe que tant que le processus correspondant existe dans un certain état (y compris en tant que zombie). En fait, juste avant de retourner une entrée de répertoire pour un identifiant de processus, le noyau revalide l'existence du processus - donc au moment où une entrée de répertoire est retournée, le processus correspondant est toujours là. L'accès à un répertoire commence également par la recherche du processus correspondant. (Si les numéros de ligne changent, recherchez proc_pident_instantiateet proc_pident_lookup.)

Vous pouvez rencontrer des problèmes causés par la liste /procet l'utilisation des résultats plus tard (même quelques microsecondes plus tard): un processus peut être en cours d'exécution lorsque vous répertoriez /procet vous arrêter avant d'agir sur les résultats.

Stephen Kitt
la source
3
Qu'en est-il des processus qui ont terminé leur exécution mais wait()n'ont pas été appelés?
el.pescado
2
Bon point @ el.pescado, une vérification rapide indique que les processus zombies ont toujours leur répertoire. Je mettrai à jour ma réponse, merci!
Stephen Kitt, le
Fondamentalement, si psaffiche le processus, son /procrépertoire devrait exister.
Barmar
@Barmar «must» en fait: permet d' psaccéder /procà l'information qu'il affiche.
Stephen Kitt