Bonjour à tous,
Voilà, je poste depuis un ou deux jours pour apprendre à utiliser fork() et pipe() mais je galère.
Alors je voudrais d'abord avoir quelques point d'éclaircissement théorique sur ces deux mécanismes:
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:
Mes questions la-dessus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $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 }
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:
3) Si j'écris le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 waitpid($pid,0) #ou wait()
Est-ce que A'' ($pid2) est le petit-fils de A. Si oui, A'' a t'il accès aux variables de A ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 $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 }
4) Est-ce que finalement, le code de dessus revient pas à faire:
c'est à dire lancer 2 fils ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $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
##############Questions sur Pipe###############
Pipe(entree, sortie) permet de communiquer entre deux processus
1) Comment faire pour écraser l'entrée (là ou le père écrit à son fils par exemple) à chaque fois que le père écrit.
Ex: Je fais un script dans lequel le père fait des calculs et envoie le résultat au processus fils.
Le fils, toutes les secondes doit récupérer le dernier résultat en lisant le pipe.
Mais en 1 seconde, le père a eu le temps d'écrire des centaines de résultats sur le pipe. Donc le fils récupère tout ça et ça va pas !!!
2) Est-ce que ce raisonnement est, justement, la bonne manière de raisonner ???
##################Questions générales################
1) Quels avantages apportent fork.Est-ce que fork permet d'augmenter la mémoire alloué au programme ?Est ce qu'utiliser fork rend le script plus stable, plus rapide ?
2) Ecrire dans un fichier pour passer l'info d'un processus à un autre est il beucoup plus lent qu'utiliser un pipe ? (2eurocents avait répondu à cette question mais je ne le retrouve plu (désolé))
Enfin voilà, désolé pour le post un peu long mais j'me pose plein de questions. Si vous pouvez répondre à quelques unes d'entre elles (car je comprend bien que répondre à toutes doit être saoulant), ça serait super.
Merci encore, bonne journée et longue vie à ce forum.
Partager