Bonjour à tous,
Afin de tester l'utilisation de la primitive fork, j'ai écris ce petit programme :
Merci d'avance,
Mongos
Afin de tester l'utilisation de la primitive fork, j'ai écris ce petit programme :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/time.h>
int main(void){
struct timeval timestamp;
if(fork()){
/**** Père ****/
int retour;
gettimeofday(×tamp,NULL);
printf("Je suis le père, timestamp : %d.%d\n",(int)timestamp.tv_sec,(int)timestamp.tv_usec);
wait(&retour);
printf("Fils mort, code : %d\n",retour);
}
else{
/**** Fils ****/
gettimeofday(×tamp,NULL);
printf("Je suis le fils, timestamp : %d.%d\n",(int)timestamp.tv_sec,(int)timestamp.tv_usec);
printf("suicide !\n");
exit(1);
}
return 0;
}
D'après mon cours, juste après le fork, le fils devrait s'exécuter avant le père. Or lorsque je teste ce programme sur un noyau 2.6.35 ( de Fedora 14), j'ai le père qui s’exécute en premier...
Je suis le père, timestamp : 1318267786.474512
Je suis le fils, timestamp : 1318267786.474590
suicide !
Fils mort, code : 256
alors que sur un 2.6.18 (centos 5) on a bien le comportement escompté.
Je suis le fils, timestamp : 1318268002.606678
suicide !
Je suis le père, timestamp : 1318268002.606790
Fils mort, code : 256
Il y aurait-il eu un changement de politique dans le gestion du fork ? Quel en est la raison ? Merci d'avance,
Mongos