2016-04-13 8 views
0

Ich verstehe nicht vollständig die Gabel-Funktion, ich verstehe nicht, wie der Vater und Kind contineo von fork() -Funktion verarbeiten oder diese Zeile überspringen und mit der nächsten gehen. zum Beispiel:Wie läuft das Kind in diesem Programm?

int value = 0; 
if (fork()!=0) 
{ 
wait(&value); 
value = WEXITSTATUS(value); 
value++; 
} 
printf("%d\n",value); 
value+=2; 
exit(value); 

, wenn wir die Gabel Funktion des Vater für wait() Funktion gehen implementieren, aber was ich nicht verstehen, dass aus dem es das Kind von dem laufen beginnen, wenn() oder er es entkommen und gehen sofort für den printf? Vielen Dank für :)

+0

Was ist passiert, als Sie es versucht haben? –

+0

ich habe nicht wirklich ich versuche nur Gabel zu verstehen und was in dieser Funktion passieren wird – Eli

+1

Warum hast du es nicht versucht? Der Betrieb hätte seine Funktionsweise gezeigt. –

Antwort

0

Das gesamte Programm dupliziert helfen und Vater und Sohn von fork() beginnen Der Vater in der if geben, weil seine Gabel Rückgabewert nicht null ist, und gehen nach dem

printf("%d\n",value); 
value+=2; 
exit(value); 

während der Sohn nur zu dieser Linie gehen, weil Pid ist Null.

Der Sohn verlässt 2 wegen Linie value += 2.

Der Vater wartet auf diesen Wert (dh Wert = 2), inkrementiere ihn (Wert = 3) und addiert dann 2 (Wert = 5).

+0

Wenn ich richtig verstehe, bedeutet das, wenn Kind und Vater Prozess funktioniert dann wird die Ausgabe: 0 und dann 3? – Eli

+0

Siehe meine Bearbeitung oben. – Boiethios

0

fork() im Grunde makes a copy des Prozesses ruft es auf.

Das bedeutet den Laufzeitstatus dieses Prozesses beim Aufruf von fork(), einschließlich des aktuellen Befehlszeigers. Der Hauptunterschied zwischen dem übergeordneten Prozess und dem untergeordneten Prozess besteht darin, dass die neue Kopie des alten Prozesses so geändert wird, dass der Rückgabewert fork()0 zurückgibt, während für den alten Prozess eine PID zurückgegeben wird.

Abgesehen davon befindet sich das untergeordnete Element in demselben Zustand wie das übergeordnete Element und setzt die Ausführung vom gleichen Punkt wie das übergeordnete Element fort, d. H. Der Aufruf an fork().