int main() {
int p1, p2;
printf("A\n"); // we always print A first
p1 = fork();
if (p1 == 0) { // child
printf("B\n");
p2 = fork(); // fork
if (p2 == 0) {
sleep(2);
printf("C\n");
exit(0);
}
wait(0); // parent waits for child to finish
}
printf("D\n");
exit(0);
return 0;
}
La sortie que je reçois est la suivante:Quelle est la sortie du programme de fourches suivant?
A // always first
B or D // whether we are in parent or child. Program may be terminated here
C // always since parent of p2 waits
D // since p2 parent exits if condition, prints D, then exits(0)
J'ai couru ce 100 fois et toujours je reçois ABD ... terminate ... CD
. Le «D» vient toujours avant le «B». Est-ce juste aléatoire ou y a-t-il une raison que je ne vois pas?
Merci.
Est-ce que vous obtenez toujours ADBCD, ou le programme se termine-t-il parfois après la deuxième lettre? Vous semblez avoir posté des informations contradictoires. –
ABD ... terminer ... CD –
Voir cette réponse en particulier la partie sous Quatrième: https://stackoverflow.com/a/6697102/13422 –