Question

Je suis actuellement dans un cours de systèmes d'exploitation et mon professeur a passé la moitié du cours à parler des PID.Elle a mentionné, comme beaucoup le savent, que les processus connaissent l'identité de leurs parents.

Ma question est la suivante :

Le PCB d'un processus connaît-il l'ID de son enfant ?Si oui, comment procéder pour l'obtenir ?

Était-ce utile?

La solution

Pour autant que je sache, un processus n'a pas de liste explicite des PID de ses enfants, mais il peut facilement être construit, car un processus doit savoir quels processus enfants il génère.Par exemple, l'appel UNIX fork() renvoie le PID enfant dans le processus parent et 0 dans le processus enfant, CreateProcess() sous Windows renvoie (IIRC) le PID du nouveau processus créé.

Autres conseils

Quand vous utilisez fork() sur * nix, la valeur de retour est le PID de l'enfant dans le processus parent et 0 dans le processus enfant.C'est une façon de le savoir.

Je ne sais pas s'ils gardent une trace de "l'arbre" de génération des processus, je pense que cela dépend du système d'exploitation que vous utilisez, mais puisque lorsque vous tuez bash (ou n'importe quel shell), tous les enfants en cours d'exécution sont également tués, je pense que les systèmes de type UNIX le font garder une trace de cela.

Si vous utilisez Linux ou tout ce qui implémente les API Unix, lorsqu'un processus appelle fork() pour créer un processus enfant, le parent reçoit le PID enfant comme code de retour, ou -1 si le fork a échoué.Le processus enfant obtient un code retour zéro.

Le PCB du processus connaît l'identifiant de son enfant.

Comme nous le savons, Fork() est utilisé pour créer des processus. Il ne prend aucun argument et renvoie un ID de processus. Après la création d'un nouveau processus enfant, le parent et l'enfant exécuteront l'instruction suivante suivant le fork().Là, nous devons distinguer le parent de l'enfant. Cela peut être fait en testant la valeur de retour de fork().

Si Fork() renvoie une valeur négative, la création du processus enfant échoue.Si Fork() renvoie un zéro au processus enfant nouvellement créé.Si Fork() renvoie une valeur positive en tant qu'ID de processus du processus enfant au processus parent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top