IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Création de processus sous linux en C


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 31
    Points : 27
    Points
    27
    Par défaut Création de processus sous linux en C
    Salut chers menbres , j'ai un problème par rapport à un exercice.
    EXO:
    Ecrire un programme en C, qui demande un entier n > 1 à l'utilisateur. Puis crée n processus fils dont la tâches est de générer un nombre aléatoire, qu'il affiche sous le format : processus fils N°i nbreAleatoire = xxxx. Le processus fils, transfère alors à partir d'un pipe le nombre aléatoire qu'il à générer au processus Père. Une fois tous les processus fils on terminer leur jobs, le processus père affiche tous les nombre aléatoires généres sous le format.
    PF1 : nbrAleatoire = xxxx.
    Voici le code que j'ai écrit pour le programme. Mais j'ai une erreur : lorsque un processus fils est créer lors de la création du suivant le process prédecesseur devient son parent, or moi je voudrait avoir un process père pour n process fils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <stdlib.h>
    #include <stdio.h>  
    #include <unistd.h>  
    #include <sys/wait.h> 
    #include <errno.h>
    int main ( int argc , char ** argv )
    {
    	/* Prise du pid du père avant de créer le fils */
    	pid_t pidPere = getpid() ;
    	// Création d ’ un processus fils
    	int n = 0, i = 0;
    	printf("Veuillez entrer un entier naturel n:");
    	scanf("%d",&n);
    	//tableau pour contenir les process
    	pid_t pidFils[n];
    	for(i = 0; i < n; i++){
    		//creation des processus fils
    		if(getpid() == pidPere){
    			pidFils[i] == fork();
    			if ( pidFils[i] == -1) {
    				perror ( " Erreur de création du fils " ) ;
    				exit ( EXIT_FAILURE ) ;
    			}else if(pidFils[i] ==0){
    				printf("Creation reussi\n");
    				printf ( " Dans le Fils : pid = % d \n " , getpid ()) ;
    				printf ( "Pid du père : ppid = % d \n \n " , getppid ()) ;	
    			}
    		}
    	}
    	return EXIT_SUCCESS;
    }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par dgonn98 Voir le message
    pidFils[i] == fork()
    T'es sûr de cette ligne ??? Examine là attentivement !!!!!!!!

    Mis à part cette erreur STUPIDE et d'autres tout aussi idiotes comme ce printf ( " Dans le Fils : pid = % d \n " , getpid ()) avec ces espaces à la con ; ton code est pas mal mais trop compliqué. Tu n'as pas besoin de ce "pidPere" pour savoir dans quelle branche tu te trouves. Tu le sais déjà via le retour de fork() !!!

    N'oublie pas non plus que ce n'est pas parce que tu quittes la branche "fils" que le fils s'arrête. Tout ce qui est après le fork() est exécuté par les deux processus, y compris le code qui se trouve donc en dehors du test fils/père. Donc quand tu programmes un père/fils, soit tu continues le père dans le if sans plus jamais en sortir, soit tu veilles à arrêter le processus fils via exit().

    Ah aussi, quand tu es dans le père, c'est getpid() qui donne son n° processus, pas getppid() !!!

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/wait.h> 
    #include <errno.h>
    int main ( int argc , char ** argv )
    {
    	// Création d ’ un processus fils
    	int n = 0, i = 0;
    	printf("Veuillez entrer un entier naturel n:");
    	scanf("%d",&n);
    	//tableau pour contenir les process
    	pid_t pidFils[n];
    	for (i=0; i < n; i++) {
    		//creation du processus fils
    		pidFils[i] = fork();
    		switch (pidFils[i]) {
    			case -1:
    				perror ("Erreur de création du fils") ;
    				exit(EXIT_FAILURE) ;
    				break;
    			case 0: // Fils
    				printf("Creation reussie\n");
    				printf("Dans le Fils : pid = %d, ppid=%d\n", getpid(), getppid()) ;
    				sleep(5);
    				exit(0);
    				break;
    			default: // Pere
    				printf("i=%d, Pid du père : pid=%d \n\n", i, getpid ()) ;	
    		}
    	}
    	wait(NULL);
    	return EXIT_SUCCESS;
    }
    J'ai gardé le tableau des pid mais il ne sert pas à grand chose non plus...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 31
    Points : 27
    Points
    27
    Par défaut Quelques questions et suite de l'exo
    Bonjour Sve@r, Merci pour votre aide. J'ai quelques zone d'ombre au niveau de votre code je n'ai pas compris comment vous avez créer le processus père, aussi le but du exit(0) et de sleep(5).J'ai aussi constater que lors de l'exécution de votre programme le premier element du tableau est le pid du père, mais comment arrive t'on à créer les fils à partir de ce drenier ?
    Enfin pour la suite de l'exercice en ce qui concerne la génération des nombres aléatoire par chaque process voiçi ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    nt mon_aleatoire (void);
     
    int main ( int argc , char ** argv )
    {
    	// Création d ’ un processus fils
    	int n = 0, i = 0;
    	printf("Veuillez entrer un entier naturel n:");
    	scanf("%d",&n);
    	//tableau pour contenir les process
    	pid_t pidFils[n];
    	for (i=0; i < n; i++) {
    		//creation du processus fils
    		pidFils[i] = fork();
    		switch (pidFils[i]) {
    			case -1:
    				perror ("Erreur de création du fils") ;
    				exit(EXIT_FAILURE) ;
    				break;
    			case 0: // Fils
    				printf("Creation reussie\n");
    				printf("Dans le Fils : pid = %d, ppid=%d\n", getpid(), getppid()) ;
    //generation du nombre aleatoire
    				printf("processus fils N°%d nbreAleatoire = %d\n\n", i+1,mon_aleatoire ());
    				sleep(5);
    				exit(0);
    				break;
    			default: // Pere
    				printf("i=%d, Pid du père : pid=%d \n", i, getpid ()) ;	
    		}
    	}
    	wait(NULL);
    	return EXIT_SUCCESS;
    }
     
    int mon_aleatoire (void)
    {
       static int tab[N];
       static int first = 0;
       int index;
       int rn;
     
       if (first == 0)
       {
          int i;
     
          srand (time (NULL));
          for (i = 0; i < N; i++)
             tab[i] = rand();
          first = 1;
       }
       index = (int)(rand() / RAND_MAX * (N - 1));
       rn = tab[index];
       tab[index] = rand();
       return (rn);
    }
    Mais je sais pas si c'est ce qu'il faut faire réellement.
    Merci pour votre Aide.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dgonn98 Voir le message
    je n'ai pas compris comment vous avez créer le processus père
    Lui pas besoin de le créer car il existe déjà. Quand un programme est exécuté, il génère un processus qui est impicitement un "père" mais comme il est seul, pas besoin de le préciser.
    Ensuite si ce processus appelle fork(), alors il génère un second processus. Là comme ils sont 2 il faut trouver une façon de les distinguer donc on dit que le généré est le "fils" et que le générateur est le "père".

    Et évidemment on peut très bien avoir P1 qui génère P2 (donc P1 est le père de P2) et P2 qui génère P3 (donc P2, tout en étant fils de P1, est quand-même le père de P3).

    Citation Envoyé par dgonn98 Voir le message
    aussi le but du exit(0)
    Afin que le fils s'arrête. Sinon comme il récupère tout le code du générateur, comme il est dans une boucle, alors il continue la boucle avec le père. C'est ce que je disais quand je disais que ce n'est pas parce qu'on quitte le "if" qu'on quitte le fils.
    Exemple 1
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main() {
        ... # ici un processus
        if (fork() == 0) {
            ... # ici procesuss fils
        }
        else {
           ... # ici procesuss père
        }
        ... # ici il y a toujours 2 processus, le fils et le père !!!!!!
    }
    Si tu mets ça dans une boucle, tu vois d'ici l'explosion de ta pile !!!

    Exemple 2
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main() {
        ... # ici un processus
        if (fork() == 0) {
            ... # ici procesuss fils
           exit(0)  # Fin du fils
        }
        else {
            ... # ici procesuss père
        }
        ... # ici il n'y a maintenant plus qu'un processus, celui du père.
    }
    Là, comme le fils se termine, le père continue seul le travail commencé. D'ailleurs, on peut même alors supprimer le "else". Ce qui donne:
    Exemple 3
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main() {
        ... # ici un processus
        if (fork() == 0) {
            ... # ici procesuss fils
           exit(0)  # Fin du fils
        }
        ... # ici il n'y a maintenant plus qu'un processus, celui du père.
    }

    Citation Envoyé par dgonn98 Voir le message
    et de sleep(5)
    Ca c'est juste un moyen rapide d'organiser les processus. Pendant que l'un dort, l'autre peut travailler. C'est plus pratique quand on veut s'assurer lequel s'affichera avant lequel à l'écran.

    Citation Envoyé par dgonn98 Voir le message
    J'ai aussi constater que lors de l'exécution de votre programme le premier element du tableau est le pid du père, mais comment arrive t'on à créer les fils à partir de ce dernier ?
    fork() !!!!!!!! C'est cette fonction qui crée un processus. Si tu sais pas ça, alors recommence le chapitre de 0

    Citation Envoyé par dgonn98 Voir le message
    Enfin pour la suite de l'exercice en ce qui concerne la génération des nombres aléatoire par chaque process voiçi ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    nt mon_aleatoire (void);
     
    int main ( int argc , char ** argv )
    {
    	// Création d ’ un processus fils
    	int n = 0, i = 0;
    	printf("Veuillez entrer un entier naturel n:");
    	scanf("%d",&n);
    	//tableau pour contenir les process
    	pid_t pidFils[n];
    	for (i=0; i < n; i++) {
    		//creation du processus fils
    		pidFils[i] = fork();
    		switch (pidFils[i]) {
    			case -1:
    				perror ("Erreur de création du fils") ;
    				exit(EXIT_FAILURE) ;
    				break;
    			case 0: // Fils
    				printf("Creation reussie\n");
    				printf("Dans le Fils : pid = %d, ppid=%d\n", getpid(), getppid()) ;
    //generation du nombre aleatoire
    				printf("processus fils N°%d nbreAleatoire = %d\n\n", i+1,mon_aleatoire ());
    				sleep(5);
    				exit(0);
    				break;
    			default: // Pere
    				printf("i=%d, Pid du père : pid=%d \n", i, getpid ()) ;	
    		}
    	}
    	wait(NULL);
    	return EXIT_SUCCESS;
    }
     
    int mon_aleatoire (void)
    {
       static int tab[N];
       static int first = 0;
       int index;
       int rn;
     
       if (first == 0)
       {
          int i;
     
          srand (time (NULL));
          for (i = 0; i < N; i++)
             tab[i] = rand();
          first = 1;
       }
       index = (int)(rand() / RAND_MAX * (N - 1));
       rn = tab[index];
       tab[index] = rand();
       return (rn);
    }
    Ouais t'as pas inventé grand chose. Tu as repris mon code et appelé depuis le fils une fonction qui génère un nombre aléatoire. Sauf que je ne pige pas comment tu réfléchis avec ce tableau statique qui sert à rien. Et c'est quoi cette façon d'initialiser le random avec ce "first" ? Si tu veux faire les choses une fois, alors tu les mets pas dans une fonction qui sera appelée plusieurs fois ; tu les mets dans le main() !!!

    Citation Envoyé par dgonn98 Voir le message
    Mais je sais pas si c'est ce qu'il faut faire réellement.
    Pourtant c'est écrit dans l'énoncé Le fils génère un nombre aléatoire et le transmets à son père via un pipe. Il faut donc que le père génère ce pipe avant de créer le fils. Une fois le fils créé, comme il hérite des variables du père, il connait alors lui-aussi le pipe. Il ne lui reste qu'à fermer le coté[0] et écrire le nombre dans le coté[1]. Le père, lui, une fois que tous les fils ont été générés, ferme alors le coté[1] et lit le coté[0] en boucle et stocke les nombres lus dans un tableau de nombres. C'est donc là qu'il faut le tableau que tu as mis dans ta fonction.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 31
    Points : 27
    Points
    27
    Par défaut Comment procéder pour la création du pipe ?
    Merçi pour vos explications je comprend enfin beaucoup de chose. En ce qui concerne la création du pipe et l'envoie du nombre aléatoire au père j'ai toujours du mal à pouvoir le faire.Je ne sais pas en réalité par ou commencer.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dgonn98 Voir le message
    En ce qui concerne la création du pipe et l'envoie du nombre aléatoire au père j'ai toujours du mal à pouvoir le faire.Je ne sais pas en réalité par ou commencer.
    1. lire la doc de la fonction pipe()
    2. écris un premier truc pour t'habituer, par exemple un petit programme qui crée le pipe (pipe()), génère un fils (fork()), et lequel fils envoie une valeur au père en passant par le pipe (write()). Le père lit la valeur dans le pipe (read()) et l'affiche à l'écran (printf())
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 31
    Points : 27
    Points
    27
    Par défaut Analyse de mon code
    Salut comment allez vous ? Bon j'ai un peu compris le fonctionnement du pipe et voici ce que j'ai pu faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/wait.h> 
    #include <errno.h>
    #include <time.h>
     #include <fcntl.h>  		
     
    int main (int argc , char ** argv)
    {
    	// Création d ’ un processus fils
    	int n = 0, i = 0;
    	printf("Veuillez entrer un entier naturel n:");
    	scanf("%d",&n);
    	//Variable contenant  un process
    	pid_t pidFils;
    	int nbreAleatoire[n];
    	int descripteur[2];
    	pipe(descripteur);
    	for (i=0; i < n; i++) {		
    		//creation du processus fils
    		pidFils = fork();
    		switch (pidFils) {
    			case -1:
    				perror ("Erreur de création du fils") ;
    				exit(EXIT_FAILURE) ;
    				break;
    			case 0: // Fils
    				printf("Creation reussie\n");
    				printf("Dans le Fils : pid = %d, ppid=%d\n", getpid(), getppid()) ;
    				static int first = 0;
    				 if (first == 0){
    					srand (time (NULL));
    					first = 1;
    				}
    				nbreAleatoire[i] = rand();
    				printf("processus fils N°%d nbreAleatoire = %d\n\n", i+1,nbreAleatoire[i]);
    				close(descripteur[0]);
    				write(descripteur[1],&nbreAleatoire[i], sizeof(int));
    				èysleep(2);
    				//Arret du processus fils 
    				exit(0);
    				break;
    			default: // Pere
    				printf("Pid du père : pid=%d \n", getpid());
     
    		}
    	wait(NULL);
    	}
    	for(i = 0; i < n; i++){
    		close(descripteur[1]);
    		read(descripteur[0],&nbreAleatoire[i], sizeof(int));
    		printf("Processus fils N°%i nbreAleatoire = %d.\n", i+1, nbreAleatoire[i]); 
    	}
    	return EXIT_SUCCESS;
    }
    Merci de me l'analyser.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dgonn98 Voir le message
    Merci de me l'analyser.
    Pas mal du tout. Pas parfait, mais t'as saisi le principe.

    Les erreurs
    1. c'est quoi ce retour de ce "first" à la con ? Le fils est généré, fait un truc et s'arrête. Pas besoin de "first" pour savoir qu'il vient d'être créé !!!
    2. le close(descripteur[1]) ne doit se faire qu'une seule fois, donc hors de la boucle
    3. le fils n'a pas vraiment besoin de générer son nombre aléatoire dans la case "i" du tableau. C'est pas grave mais si tu le génères dans une autre variable (tiens par exemple dans ce "first" qui sert à que dalle) et que tu utilises cette variable dans le write() ça fonctionnera pareil mais au-moins tu auras la preuve qu'il y a bien eu transfert d'infos entre le fils et le père. Et tu peux même aller jusqu'à déclarer le tableau après avoir créé les fils (comme ça eux ils ne le connaissent pas). Parce que là, quelqu'un qui ne connait pas la façon dont Unix/Linux gère la mémoire en multi-process pourrait penser qu'en remplissant le tableau fils il est alors automatiquement rempli chez le père par ricochet (ce qui est absolument faux mais c'est ce que laisse penser ton code)


    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <time.h>
    #include <sys/wait.h> 
     
    int main (int argc , char ** argv) {
    	// Préparation des processus fils
    	int n;
    	printf("Veuillez entrer un entier naturel n:");
    	scanf("%d",&n);
     
    	// Création du pipe
    	int cote[2];
    	pipe(cote);
     
    	// Création fils
    	int i;
    	for (i=0; i < n; i++) {		
    		switch(fork()) {
    			case -1:
    				perror ("Erreur de création du fils") ;
    				exit(EXIT_FAILURE) ;
    				break;
    			case 0: // Fils
    				close(cote[0]);
    				printf("Creation reussie\n");
    				printf("Dans le Fils : pid = %d, ppid=%d\n", getpid(), getppid()) ;
     
    				// Initialisation graine aléatoire
    				srand (time(NULL)^getpid());
     
    				// Nombre aléatoire
    				int nb=rand();
    				printf("processus fils N°%d nbreAleatoire = %d\n\n", i+1, nb);
    				write(cote[1], &nb, sizeof(int));
     
    				// Arret du processus fils 
    				exit(0);
    				break;
     		}
    	}
     
    	// Gestion du père
    	close(cote[1]);
    	sleep(2);
    	int nbreAleatoire[n];
    	printf("Pid du père : pid=%d \n", getpid());
    	wait(NULL);
    	for (i = 0; i < n; i++){
    		read(cote[0], &nbreAleatoire[i], sizeof(int));
    		printf("Processus fils N°%i nbreAleatoire = %d.\n", i+1, nbreAleatoire[i]); 
    	}
    	return EXIT_SUCCESS;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/11/2009, 09h05
  2. Gestion des processus sous Linux
    Par progdevlop dans le forum C
    Réponses: 18
    Dernier message: 27/06/2009, 14h45
  3. Les processus sous linux
    Par bhh_rrr dans le forum Administration système
    Réponses: 3
    Dernier message: 18/03/2009, 21h32
  4. Empiler et dépiler des processus sous Linux ? Comment gérer la pile ?
    Par Leschocolats dans le forum Administration système
    Réponses: 2
    Dernier message: 18/12/2008, 21h26
  5. Création d'installeur sous Linux et Windows
    Par knarf87 dans le forum Linux
    Réponses: 3
    Dernier message: 09/05/2007, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo