// Lancement de processus // nProc.cpp // // Lancements de processus dans une boucle, chaque fils exécutant la // même boucle. // le père p0, // lance 3 fils (i=1,2,3) p01,p02,p03 // p01, le premier fils lance 2 fils (i=2,3) p012,p013 // p02 lance 1 fils (i=3) p023 // p012 lance 1 fils (i=3) p0123 // 8 processus sont créés (p0 est compté) #include <unistd.h> #include <iostream> using namespace std; // int main(int ntm, char * tm[]) { pid_t idp; int n=3, i; cout<<"Lancement par proc: "<<getpid()<<endl; for(i=1; i<=n; i++) { idp=fork(); if(idp == -1) { cerr<<"Echec fork"<<endl; return 1; break; } for(int k=1; k<i; k++) cout<<" "; cout<<"pid:"; cout.width(4); cout<<getpid()<<" père:"<<getppid()<<endl; } cerr<<"(fin "<<getpid()<<")"<<endl; return 0; } // Lancé par a.out > toto ce qui sépare la sortie erreur (à // l'écran) qui affiche les messages de fin de processus (on compte // ainsi facilement le nombre de processus) et la sortie standard qui // affiche deux lignes pour chaque création de processus dépendant // du processus initial. On trouve 14 lignes, donc 7 processus sont // créés après le processus initial. // On peut remarquer que le père meut avant tous ces descendants, donc // on voit des "pères" de numéro 1. // // // sortie erreur: | sortie standard // -------------------------------------------------------------- // (fin 2480) | Lancement par proc: 2480 // (fin 2492) | pid:2480 père:2828 // (fin 2000) | pid:2656 père:2480 // (fin 2656) | pid:2480 père:2828 // (fin 2684) | pid:2000 père:2480 // (fin 3248) | pid:2656 père:2480 // (fin 580) | pid:3248 père:2656 // (fin 3336) | pid:2480 père:2828 // | pid:2492 père:2480 // | pid:2000 père:1 // | pid:2656 père:1 // | pid:2684 père:2000 // | pid:3248 père:2656 // | pid: 580 père:2656 // | pid:3336 père:3248 //fin nProc.cpp