2017-03-06 1 views
0

L'appel système fork() effectue deux copies identiques de l'espace adresse, l'une pour parent, l'autre pour l'enfant.Détection de la création du processus enfant dans fork()

Lorsque vous utilisez fork avec une instruction if, combien de fois le processus enfant sera-t-il créé dans le code suivant?

fork(); 
pid=fork(); 
if(pid==0) 
{ 
fork(); 
} 
+0

Cinq fois. Avez-vous besoin d'explications supplémentaires? – Beta

+0

"fait deux copies identiques de l'espace d'adressage" - non, ce n'est pas le cas. Il fait une copie identique d'un espace d'adressage existant. Et sur la plupart des implémentations modernes, il ne fait même pas cela - il crée juste un nouvel espace d'adressage qui référence toutes les mêmes pages que l'original, mais les marque pour la copie sur écriture. – twalberg

Répondre

0

Ajouter un peu de code supplémentaire pour obtenir quelque chose comme:

#include <stdio.h> 
#include <unistd.h> 

int main() 
{ 
    pid_t pid; 
    pid = fork(); 
    if (pid != 0) printf("%d\n", pid); 
    pid = fork(); 
    if (pid != 0) printf("%d\n", pid); 
    if(pid==0) 
    { 
     pid = fork(); 
     if (pid != 0) printf("%d\n", pid); 
    } 
    return 0; 
} 

compilez, exécutez, et vérifiez sa sortie: 5 ID de processus enfant.