3 votes

Attendre() comportement étrange sur Ubuntu

J'ai écrit le programme suivant et l'ai exécuté dans le terminal. Mais je suis confus car le programme ne affiche pas les résultats comme le comportement décrit sur internet. J'ai copié ce code à partir d'un livre.

#include 
#include 

int main(int argc, char *argv[])
{
pid_t childid;

if(argc!=2)
{
    printf("Veuillez fournir un argument dans le terminal\n");
    return 0;
}

int i, n = atoi(argv[1]);

for(i=0; i 0);

printf("i = %d\n ID du processus %d\n ID du parent %d\n ID de l'enfant %d\n", i, getpid(), getppid(), childid);

return 0;

}

Est-ce que le processus parent ne devrait pas exécuter la dernière instruction "printf" n fois, où n est le nombre d'enfants créés.. Que se passe-t-il lorsque le parent appelle while(wait(NULL) > 0); et que l'enfant est encore en exécution?

Merci

3voto

Otávio Décio Points 44200

La fonction wait() suspend l'exécution du processus appelant jusqu'à ce qu'un de ses enfants se termine.

wait() renvoie le PID de l'enfant dont l'état est modifié (ou terminé). Il renvoie -1 en cas d'erreur (lorsqu'il n'y a pas d'enfant à attendre).

Ainsi, la boucle while sera exécutée 0 fois dans le processus enfant (forked) et n fois dans le processus parent.

Ce programme affichera le dernier message n+1 fois (1 fois dans le principal et n fois dans les enfants).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X