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

Linux Discussion :

Programme multi processus qui marche aléatoirement


Sujet :

Linux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut Programme multi processus qui marche aléatoirement
    Bonjour

    Je dois faire un programme qui génère deux processus.
    J'utilise donc la primitive fork().

    Mon problème est que le programme marche seulement lorsque l'ordonnanceur passe les processus dans un certain ordre et je ne comprends absolument pas pourquoi?

    Pour plus d'explications voila mon code

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #include <stdio.h>
     
    #include <string.h>
     
    #include <unistd.h>
    #include <stdlib.h>
     
     
     
    int main(int argc, char **argv)
    {
     
    	pid_t pid;
     
     
     
    	printf("\n 1) je suis dans main et mon pid est %i \n",getpid());
     
    	/*---------Création du 1er processus fils--------------*/
     
    	pid = fork();		//pid = pid du fils
     
    	/*---------si le fork ne cree pas un nouveau processus---------*/
     
    	if (pid < 0)		
    	{
     
    		perror("fork");
    		return 1;
     
    	}
    	/*-----------si on est dans p1-----------*/
    	else if (pid)
    		{
    			printf("\n 2) Je suis dans p1\n");
    			printf("\n Le PID du processus P1 est: %i \n", getpid());
    			printf("\n Le PID du processus main est: %i \n", getppid());
     
     
    			/*---------creation d'un 2eme processus-------------*/
    			pid=fork();			// creation de p2
    			/*-----------si erreur------------*/			
    			if(pid<0)
    			{
     
    				perror("fork");
    				return 1;
    			}
    			/*-----------si pid est egal a 0 on est dans p2------------*/
    			else if(pid)
    				{
    					printf("\n 3) Je suis dans P2\n");
    					printf("\n Le PID du processus P1 est: %i \n", getppid());
    					printf("\n Le PID du processus P2 est: %i \n", getpid());
    				}
    			/*----------sinon on est dans p1-----------*/
    			else
    				{
    					printf("\n 4) Je suis dans P1");
    					printf("\n Le PID du processus P1 est: %i \n", getpid());
    				}
    		}
    	else
    		{
    			printf("\n 5) Je suis dans main");
    			printf("\n Mon PID est de: %i \n", getpid());
    			printf("\n Le PID du processus P1 est: %i \n", pid);
    		}
    }
    et voila la console:
    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
     1) je suis dans main et mon pid est 6122 
     
     5) Je suis dans main
     Mon PID est de: 6123 
     
     Le PID du processus P1 est: 0 
     
     2) Je suis dans p1
     
     Le PID du processus P1 est: 6122 
     
     Le PID du processus main est: 5261 
     
     4) Je suis dans P1
     Le PID du processus P1 est: 6124 
     
     3) Je suis dans P2
     
     Le PID du processus P1 est: 5261 
     
     Le PID du processus P2 est: 6122

    Vous pouvez voir que l'ensemble des conditions if que j'utilise ne fonctionneent pas puisqu'elles me renvoient le mauvais pid. ET je ne comprend absolument pas pourquoi.

    Merci d'avance de votre aide
    ...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    En fait c'est résolu il fallait mettre !pid au lieu de pid

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme Multi-Processus par fork()
    Par domiq44 dans le forum C
    Réponses: 10
    Dernier message: 18/01/2011, 16h49
  2. Programme de sudoku qui ne marche pas! :(
    Par DOC doc doc dans le forum C++
    Réponses: 18
    Dernier message: 20/03/2007, 12h56
  3. Réponses: 2
    Dernier message: 13/12/2006, 14h33
  4. moteur de recherche qui marche de façon aléatoire.
    Par sam01 dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/06/2006, 17h09
  5. Réponses: 7
    Dernier message: 27/04/2006, 15h51

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