Bonjour
Je réalise un programme en c qui, pour le moment, doit faire communiquer deux processus par un pipe.
Or selon l'ordre dans lequel l'ordonnanceur fait passer les processus mon programme marche ou ne marche pas.
Je ne vois vraiment pas quelle est la partie du code posant problème.
Voila le code:
Code :
- #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 le code de ma console quand ca ne va pas
1) je suis dans main et mon pid est 5779
5) Je suis dans main
Mon PID est de: 5780
Le PID du processus P1 est: 0
2) Je suis dans p1
Le PID du processus P1 est: 5779
Le PID du processus main est: 5351
4) Je suis dans P1
Le PID du processus P1 est: 5781
Le titre de ma fenetre est: Processus P1
3) Je suis dans P2
Le PID du processus P1 est: 5351
Le PID du processus P2 est: 5779
descripteur de p1 vers p2 3
descripteur de p2 vers p1 3
Je ne comprend absolument pas comment le pid de main peut il varier entre le début et la fin de mon code.
Et pourquoi quand je fais printf("\n Le PID du processus P1 est: %i \n", pid); il me retourne le code 0 alors que p1 étant conçu il devrait me retourner le pid de p1.
Merci d'avance de votre aide.
Je me tiens à votre disposition
edit:simplification du code
Message édité par Anonymouse le 13-10-2007 à 17:08:13