heyyyyy ! est ce qu il y a qlq un peut m expliquer comment on cree des processus dans linux en c++ ( a partir du pere on va creer jusqu'a 5 generation ) puis comment on lui donne le pid ( pere 1 - 1er generation 11 et 12 - 2eme generation 111 et 112 / 121 et 122 .... ) tout ce que je que j utlise pid = fork () ; explication SVP !!!!
Pour créer un processus sous Linux, on utilise fork() ou une combinaison de fork() et exec() (voir man fork et man exec pour la doc).
En résumé:
fork() créer une copie exacte du processus qui l'appelle. Cela veut dire que fork() est appelé une fois par le processus père, mais retourne DEUX fois (une fois dans le processus père et une fois dans le processus fils). Pour différencier dans quel processus on se trouve après fork(), on utilise sa valeur de retour (qui vaut 0 si on est dans le processus fils, et le pid du fils si on est dans le père).
Le programmeur ne peut pas choisir le pid de ses processus, cela est géré par le kernel.
Un processus peut connaitre son pid à tout moment en appelant getpid(), et le pid de son père en appelant getppid()
Si le but d'un processus est de créer un nouveau processus en exécutant un autre exécutable, on utilise fork(), puis on appelle exec() dans le fils.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main ()
{
pid_t pid= fork(); // i create the child processu ?
if (pid == 0) { // we check if its a child process ?
printf("child process , pid = %d , ppid = %d ",getpid(),getppid() ); // we show pid ans ppid
execl("/bin/ls", "/bin/ls", (char*) 0); // Run a program.
// never reach this point because of execl().
}
else {
if (pid != -1){ // was the fork successful?
printf("father process , pid = %d , ppid = %d ",getpid(),getppid() );
}
else {
// There was an error -- fork() failed.
}
}
int status;
wait(&status);
return status;
}
I hope this answers your question. It runs /bin/ls in the child process.
ok that's good but i have a question suppose we have a father process ( 1 ) and we are gonna create 2 process child ( 1.1 and 1.2 ) then we ask the user to choose if he wants to create a process and if yes he choose to create from 1.1 or 1.2 a process child ( 1.1.1 or 1.2.1 ) how can we do that ! to determine wich process to chose to create the new process !