2017-07-23 3 views
1

Je n'ai jamais eu ça avant; Je fais un programme simple: un processus père qui crée des processus enfants, et après il se termine; c'est le codeFork(), un processus ne se termine pas?

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/wait.h> 



int child(pid_t pid) 
{ 
    printf("process %d is terminating\n",pid); 
    exit(EXIT_SUCCESS); 
} 

int main() 
{ 
    int i; 
    for(i = 0; i < 2; i++){ 
     if(fork() == 0) 
      child(getpid()); 
    } 
    printf("father, pid=%d terminated\n",getpid()); 
    /*if(wait(NULL) == -1) 
     perror("wait");*/ 
    exit(EXIT_SUCCESS); 
} 

quand je lance, tous les processus imprimés, mais un processus, je pense que le père, mais je ne suis pas sûr, ne se termine pas parce que la borne est active (ne semble pas $); insted, si j'insère une ligne commentée avec wait, le programme s'exécute correctement; pourquoi ça?

terminal output

+0

Pouvez-vous afficher la sortie de terminal que vous voyez? –

+0

l'a ajouté; comme vous pouvez le voir, parfois il fonctionne correctement, parfois un processus ne se termine pas .. –

Répondre

0

Si vous regardez la dernière course dans la capture d'écran, vous verrez « processus 8429 se termine » après l'invite terminal a été imprimé à l'écran. Ce qui semble se produire est que votre processus "père" arrive à sortir d'abord, et votre shell affiche alors l'invite. Ensuite, dans le dernier cas, le processus fils (PID 8429) a imprimé sa sortie puis s'est terminé.

Donc, il se termine, mais parfois le processus fils ne se termine pas avant la fin du processus parent et votre processus shell a déjà imprimé l'invite. Il suffit de frapper à nouveau "enter" quand il fait cela, et vous devriez voir une invite de shell appropriée. Ou même entrer une commande, et il devrait fonctionner normalement.

+0

ok ok c'était une question stupide..merci beaucoup !! :) –