Fonctionnement fork()
Résolu
x-timas
Messages postés
124
Date d'inscription
Statut
Membre
Dernière intervention
-
x-timas Messages postés 124 Date d'inscription Statut Membre Dernière intervention -
x-timas Messages postés 124 Date d'inscription Statut Membre Dernière intervention -
Bonsoir tout le monde,
J'ai donc plusieurs questions :
#################Question sur fork##################
fork permet de générer un processus fils. On peut l'utiliser de la manière suivante:
Code :
$pid=fork();
if $pid==0
{
#Le fils (processus A') est né et éxécute le code entre les accolades
}
else
{
#C'est le père (processus A) qui éxécute le code entre les accolades
}
Mes questions la-dessus:
1) Est-ce que le processus fils A' a accès aux variables définies dans A et inversement ???
2) Est-ce que les processus A et A' s'éxécute simultanément si l'on décide de ne pas mettre le code suivant dans A:
Code :
waitpid($pid,0) #ou wait()
3) Si j'écris le code suivant:
Code :
$pid=fork();
if $pid==0
{
#Le fils (processus A') est né et éxécute le code entre les accolades
$pid2=fork();
if($pid2==0)
{
#petit-fils ??? (processus A'')
}
waitpid($pid2,0);
}
else
{
#C'est le père (processus A) qui éxécute le code entre les accolades
}
Est-ce que A'' ($pid2) est le petit-fils de A. Si oui, A'' a t'il accès aux variables de A ?
4) Est-ce que finalement, le code de dessus revient pas à faire:
Code :
$pid=fork();
$pid2=fork();
if $pid==0
{
#Le fils 1 (processus A') est né et éxécute le code entre les accolades
}
if($pid2==0)
{
#Le fils 2 (processus A'') est né et éxécute le code entre les accolades
}
#C'est le père (processus A) qui éxécute le code entre les accolades
Voila
Merci d'avance
c'est à dire lancer 2 fils ??
J'ai donc plusieurs questions :
#################Question sur fork##################
fork permet de générer un processus fils. On peut l'utiliser de la manière suivante:
Code :
$pid=fork();
if $pid==0
{
#Le fils (processus A') est né et éxécute le code entre les accolades
}
else
{
#C'est le père (processus A) qui éxécute le code entre les accolades
}
Mes questions la-dessus:
1) Est-ce que le processus fils A' a accès aux variables définies dans A et inversement ???
2) Est-ce que les processus A et A' s'éxécute simultanément si l'on décide de ne pas mettre le code suivant dans A:
Code :
waitpid($pid,0) #ou wait()
3) Si j'écris le code suivant:
Code :
$pid=fork();
if $pid==0
{
#Le fils (processus A') est né et éxécute le code entre les accolades
$pid2=fork();
if($pid2==0)
{
#petit-fils ??? (processus A'')
}
waitpid($pid2,0);
}
else
{
#C'est le père (processus A) qui éxécute le code entre les accolades
}
Est-ce que A'' ($pid2) est le petit-fils de A. Si oui, A'' a t'il accès aux variables de A ?
4) Est-ce que finalement, le code de dessus revient pas à faire:
Code :
$pid=fork();
$pid2=fork();
if $pid==0
{
#Le fils 1 (processus A') est né et éxécute le code entre les accolades
}
if($pid2==0)
{
#Le fils 2 (processus A'') est né et éxécute le code entre les accolades
}
#C'est le père (processus A) qui éxécute le code entre les accolades
Voila
Merci d'avance
c'est à dire lancer 2 fils ??
A voir également:
- Fonctionnement fork()
- Fonctionnement processeur - Guide
- Fonctionnement du protocole http - Guide
- Notice de fonctionnement - Guide
- Fonctionnement onedrive - Guide
- Fonctionnement time machine - Guide
5 réponses
j'ai pas lu, mais peut etre que ça t'aidera :
http://www.commentcamarche.net/faq/sujet 10611 que fait un fork
http://www.commentcamarche.net/faq/sujet 10611 que fait un fork
Oh la la, que de questions!
1) Les variables connues au moment du fork seront ensuite connues des deux processus; mais le fils hérite d'une copie de l'environnement du père, c'est dire qu'ensuite chaque modification dans un processus n'affectera pas les variables de l'autre processus. Ceci n'est pas vrai pour les descripteurs de fichiers qui, eux, restent 'communs' aux deux processus.
2) Bien sûr que les deux processus s'exécutent en parallèle (en sous-entendant le sens réel) et le wait qui ne fait qu'attendre la fin du processus fils ne change rien car on peut considérer que cette attente du père est une exécution.
3) Il ne faut pas ainsi se poser la question: A et A' partagent leur environnement au moment du fork, de même pour A' et A". Il se peut que A et A" partagent les mêmes variables si A' ne les a pas modifiées; mais attention ce ne seront que des copies.
4) Non ce n'est pas pareil car:
- cas n° 3: A" est connu de A'
- cas n° 4: A" est connu de A
1) Les variables connues au moment du fork seront ensuite connues des deux processus; mais le fils hérite d'une copie de l'environnement du père, c'est dire qu'ensuite chaque modification dans un processus n'affectera pas les variables de l'autre processus. Ceci n'est pas vrai pour les descripteurs de fichiers qui, eux, restent 'communs' aux deux processus.
2) Bien sûr que les deux processus s'exécutent en parallèle (en sous-entendant le sens réel) et le wait qui ne fait qu'attendre la fin du processus fils ne change rien car on peut considérer que cette attente du père est une exécution.
3) Il ne faut pas ainsi se poser la question: A et A' partagent leur environnement au moment du fork, de même pour A' et A". Il se peut que A et A" partagent les mêmes variables si A' ne les a pas modifiées; mais attention ce ne seront que des copies.
4) Non ce n'est pas pareil car:
- cas n° 3: A" est connu de A'
- cas n° 4: A" est connu de A
1) les variables du pere et du fils sont distinctes donc si A' modifie sa variable ça ne va pas modifier celle du pere
2) oui les deux processus s'execute simultanement
3) oui A'' est le fils de A' donc petit fils de A pour la question des variable voir la question 1
4) non les code sont different dans le deuxieme tu va cree 4 processus car le pere va lancé 2 fils et 1 des fils va en lancer 1 alors que le premier code tu a 3 processus
2) oui les deux processus s'execute simultanement
3) oui A'' est le fils de A' donc petit fils de A pour la question des variable voir la question 1
4) non les code sont different dans le deuxieme tu va cree 4 processus car le pere va lancé 2 fils et 1 des fils va en lancer 1 alors que le premier code tu a 3 processus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Quelqu'un pourra m'aider peut-être?