CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C ==> question fork()

martin232
martin232
Niveau 8
07 juin 2009 à 10:52:16

bonjour, on a fait des TP sur le fork(), mais j'ai du mal à comprendre dans quel ordre se passe l'exécution :

void exo1(){
int retour ;
int pid=fork() ;
if(pid!=0){
printf("Pere >> PID Pere : %d | PID fils : %d\n", getpid(), pid) ;
if(wait(&retour)==-1){
perror("\nErreur : pas de fils") ;
}
if(WIFEXITED(retour)!=0){
printf("Fin normale\n") ;
}
}
else{
printf("\nFils >> PID fils %d", getpid()) ;
sleep(5) ;
printf("\nFils >> Terminaison normale du fils\n") ;
}
}

======>
Pere >> PID Pere : 7849 | PID fils : 7850
Fils >> PID fils 7850
Fils >> Terminaison normale du fils
Fin normale

---------------------------------------------
exo(){
int retour ;
int pid=fork() ;
if(pid!=0){
printf("Pere >> PID Pere : %d | PID fils %d\n",getpid(), pid) ;
if(kill(pid,SIGKILL)==-1)
perror("erreur") ;
else
printf("Pere >> fils tué !\n") ;
if (wait(&retour)==-1)
perror("Pas de fils pour le wait\n") ;
if(WIFEXITED(retour)!=0)
printf("fin normale\n");
}
else{
printf("Fils >> PID fils : %d\n",getpid());
sleep(5);
printf("Fils >> Terminaison normale du fils\n");
}
}

======>
Fils >> PID fils : 7897
Pere >> PID Pere : 7896 | PID fils 7897
Pere >> fils tué !

-------------------------------------

déjà je vois pas pourquoi dans le premier exemple il affiche en premier :
Pere >> PID Pere : 7849 | PID fils : 7850
et dans le deuxième exemple il affiche en premier :
Fils >> PID fils : 7897

merci d'avance

guyver2
guyver2
Niveau 10
07 juin 2009 à 11:55:13

le principe de fork est de créer deux processus (enfin un de plus que celui que tu as deja lancé).
Ces deux processus s'exécutent en "même temps", il n'y a donc pas d'ordre préétablie entre le pere et le fils. Relance plusieurs fois le même programme et tu verras que l'ordre d'affichage change.

martin232
martin232
Niveau 8
07 juin 2009 à 12:02:24

ok merci :)

donc j'ai tout compris sur les fork :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment