Pourquoi mon processus parent n’attend-il pas la deuxième fois? C / Unix

Donc, ce que j’essaie de faire, c’est de créer un processus enfant, de l’exécuter et d’exécuter ls. Ensuite, une fois que ls est terminé, créez un autre processus enfant et lancez une commande cat sur un fichier. La seconde attente (pid) ne semble pas attendre la fin du deuxième processus enfant. voici mon code et sortie

#include  int main(){ int pid; printf("In parent process, creating child now...\n"); pid = fork(); if (pid==0){ printf("Now in child process...\n"); execl("/bin/ls","ls","-l",(char*)0); } wait(pid); printf("ls child process complete\n"); printf("in parent process\n"); printf("Creating another child process\n"); pid=fork(); if(pid==0){ execl("/bin/cat","cat","f1",(char*)0); } wait(pid); return 0; } 

Voici ma sortie

 In parent process, creating child now... Now in child process... "Contents of ls" ls child process complete in parent process creating another child process [username@host ~]$ "Contents of file" *cursor* 

le processus parent semble se terminer avant la fin du deuxième enfant. Il n’y a qu’un seul enfant à la fois. Le “Contenu du fichier” est supposé apparaître avant l’invite [nom_utilisateur @ host ~] $. Je pense que je suis en train de perdre une attente ou un mauvais pid ou quelque chose. Merci d’avance!

L’argument pour wait() n’est pas un PID. C’est un pointeur sur un int où le statut de sortie sera stocké. Vous passez un entier où un pointeur est nécessaire, ce qui signifie:

  1. Le programme peut se bloquer ou corrompre un emplacement de mémoire non lié dès que vous appelez wait . Son comportement après ce point est imprévisible.
  2. Vous devez activer plus d’avertissements du compilateur et y faire attention.

Bien que le processus Cat ait peut-être terminé, le cache disque peut encore contenir les résultats … Au lieu d’attendre que chat se termine, attendez que le verrou du fichier soit libéré.