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
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
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); } }
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
...
Partager