2017-03-06 2 views
0

Der Systemaufruf fork() erstellt zwei identische Kopien des Adressraums, einen für den übergeordneten, den anderen für den untergeordneten Bereich.Ermitteln der untergeordneten Prozessgenerierung in fork()

Wenn fork mit einer if-Anweisung verwendet wird, wie oft wird der untergeordnete Prozess im folgenden Code erstellt?

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

Fünf mal. Brauchen Sie weitere Erklärungen? – Beta

+0

"macht zwei identische Kopien des Adressraums" - nein, tut es nicht. Es erstellt eine identische Kopie eines bereits vorhandenen Adressraums. Und bei den meisten modernen Implementierungen macht es das nicht einmal - es erstellt nur einen neuen Adressraum, der auf die gleichen Seiten wie das Original verweist, sie aber für das Kopieren beim Schreiben markiert. – twalberg

Antwort

0

ein wenig mehr Code hinzufügen etwas wie zu bekommen:

#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; 
} 

Dann kompilieren, ausführen und überprüfen Sie die Ausgabe:5 Kind Prozess-IDs.