Qu'advient-il de la table descripteur de fichier dans le processus parent après avoir appelé DUP2 et ExecvP dans le processus d'enfant?

StackOverflow https://stackoverflow.com//questions/25050117

  •  21-12-2019
  •  | 
  •  

Question

Je codifie un programme de shell simple mais incertain de ce qui arrive à la table descripteur de fichier après DUP2 () et ExecvP.J'ai donc un processus de parent en attente de la fin du processus d'enfant (WaiterPID) mais lorsqu'il se réchauffe pour attendre la prochaine entrée de l'utilisateur, quelle est la table descripteur de fichier que j'ai modifiée à l'aide de DUP2 dans le processus d'enfant ne persiste pas dans le processus parent?Est-ce parce que ExecVP réinitialise la table de descripteur de fichier à l'original?

Edit: Je l'ai compris.La fonction Fork établit une copie séparée de l'image du programme, y compris la table descripteur de fichier, de sorte que la table FD du processus parent ne soit pas affectée.

Était-ce utile?

La solution

rien.Le processus enfant reçoit une copie des descripteurs de fichiers du parent lorsqu'il est créé par fork(), mais les modifications apportées à ce que cela ne soit pas partagé vers le parent.

(Notez que, tandis que le descripteur de fichier table n'est pas partagé avec le parent, l'état des descripteurs de fichier eux-mêmes est! Par exemple, si vous généracodiCodeCode sur un descripteur de fichier sur un processus d'enfant héritéDe son parent, qui affecte également la copie dans le parent.)

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