C \ processus

Fermé
pjaar Messages postés 1 Date d'inscription samedi 19 septembre 2009 Statut Membre Dernière intervention 19 septembre 2009 - 19 sept. 2009 à 15:14
 loupius - 19 sept. 2009 à 19:52
Bonjour,

voici un code que je viens d'écrire:

    int tempo,x,a,status;
    srand(time(NULL));
    printf("Veuillez introduire un nombre entier entre 1 et 10:\n");
    int n = 0;
    while(n <1 || n >9)
    {
      scanf ("%d", &n);
    }
    printf("Nombre introduit: %d\n",n);
    for (x=0 ; x<n; x++)
    {
        tempo = (rand()%3)+1;
        printf("P: Creation du fils %d\n",x+1);
        a = fork();
        if (a<0) return 1;
        if (a == 0)
        {
            printf("\t\tJe suis le fils %d de pid %d\n",x+1,getpid());
            sleep(tempo);
            exit(x);
        }
    }
    for(x=0;x<n;x++)
    {
        wait(&status);
          if(WIFEXITED(status)) printf("P: Le fils num %d de pid se termine\n",WEXITSTATUS(status)+1);
    }
    return 0;


je voudrais afficher le pid de chaque fils qui se termine dans la dernière boucle, quelqu'un pourrait-il m'aider?

1 réponse

man 2 wait te donnera pid_t wait(int *status); avec pid_t qui est le PID du processus fils qui est terminé.
Utiliser une boucle 'for' pour contrôler la fin de l'exécution des processus fils n'est pas, à mon avis, un bon choix; je préfère quelque chose du style:
while ((pid = wait(&status))
  printf("%u s'est terminé avec le code %d\n", pid, status);
J'ai simplifié, car en fait, comme tu pourras le lire dans le 'man', l'interprétation de 'status' doit se faire avec des macros.
Bonne continuation.
0