Comment vérifier si un fork du processus est toujours en cours d'exécution du programme c
J'ai le pid d'un fork du processus. Maintenant, à partir de mon code c (sous Linux), je dois vérifier périodiquement si ce processus est encore en cours d'exécution ou sa résiliation. Je ne veux pas utiliser de blocage des appels comme wait()
ou waitpid()
. Besoin (de préférence) un non-système de blocage d'appel qui serait juste vérifier si ce pid est toujours en cours et retourner l'état de l'enfant.
Ce qui est plus simple et la meilleure façon de le faire?
OriginalL'auteur Siddhartha Ghosh | 2014-10-15
Vous devez vous connecter pour publier un commentaire.
La
waitpid()
fonction peut prendre la valeur de l'optionWNOHANG
à ne pas bloquer. Voir la page de manuel, comme toujours.Cela dit, je ne suis pas sûr que les pids sont garantis de ne pas être recyclés par le système, qui serait ouvert à des conditions de course.
waitpid
ne fonctionnera que pour les enfants de la procédure en l'appelant. Et leur pid ne sera pas recyclé jusqu'à ce qu'ils ont été attendu, donc, ce est la bonne façon de vérifier si votre enfant a pris fin.sans stocker de l'enfant pid précédemment, cette solution de retour ne se termine enfant pid. Pour obtenir l'exécution de l'enfant pid que puis-je faire? exemple de code lien paste.ubuntu.com/25386744
OriginalL'auteur unwind
Cela va "réussir" (retour à 0) si le PID existe. Bien sûr, il peut exister que parce que l'origine du processus terminé et quelque chose de nouveau a pris sa place...c'est à vous de décider si ce qui compte.
Vous pourriez envisager de la place de l'enregistrement d'un gestionnaire pour
SIGCHLD
. Qui ne dépend pas sur le PID qui pourraient être recyclés.Je reconnaît explicitement que dans ma réponse et a offert une meilleure solution avec un deuxième mention explicite de la façon dont il pourrait être mieux. Dire que j'ai "encouragé" la démocratie est un peu beaucoup, vous ne pensez pas?
N. B. C'est sûr, si c'est votre propre processus enfant que vous faites des tests de cette façon parce que le processus de l'enfant de ne pas avoir le pid recyclé jusqu'à ce qu'il l'a attendu, mais c'est toujours une mauvaise pratique, car mieux des appels système existe pour elle et, finalement, quelqu'un va utiliser cette méthode de façon incorrecte et d'obtenir de mauvais résultats. Presque toutes les utilisations d'un pid (autre qu'un appel à la
waitpid
) sont ouvertes à potentiellement dangereux des conditions de course.OriginalL'auteur John Zwinck
Utiliser le
WNOHANG
option danswaitpid()
.OriginalL'auteur Claudio