Aber die Kinder- und Elternprozesse befinden sich auf verschiedenen Speicherräumen. Diese Speicherplätze haben den gleichen Inhalt und jeder Fall, der von einem Prozess ausgeführt wird, wirkt sich nicht auf den anderen Prozess aus.
Wenn die Kinderprozesse erstellt werden; Jetzt haben beide Prozesse denselben Programmzähler (PC), sodass beide Prozesse auf denselben nächsten Anweisungen verweisen. Die vom übergeordneten Prozess geöffneten Dateien sind für den untergedreifenden Prozess gleich.
Der untergeordnete Prozess ist genau der gleiche wie sein Elternteil, aber es gibt einen Unterschied in den Prozessen -IDs:
Eigenschaften des Kinderprozesses
Im Folgenden finden Sie einige der Eigenschaften, die ein Kinderprozess besitzt:
Eigenschaften, die nicht durch ein Kinderprozess geerbt werden
Im Folgenden sind einige der Eigenschaften aufgeführt, die nicht durch einen Kinderprozess geerbt werden:
gabel () in c
Es gibt keine Argumente in fork () und die Rückkehrtyp von Fork () ist ganzzahlig. Sie müssen die folgenden Header -Dateien einfügen, wenn fork () verwendet wird:
#enthaltenKann bei der Arbeit mit fork () für den Typ verwendet werden pid_t Für Prozesse ist IDs als PID_T in definiert in .
In der Header -Datei wird Fork () definiert, sodass Sie sie in Ihr Programm einbeziehen müssen, um fork () zu verwenden.
Der Rückgabetyp ist in und fork () aufruf definiert in . Daher müssen Sie beide in Ihr Programm einbeziehen, um fork () -Systemanrufe zu verwenden.
Syntax von Fork ()
Die Syntax von Fork () -Systemaufruf in Linux, Ubuntu, lautet wie folgt:
pid_t gabel (void);In der Syntax ist der Rückgabetyp pid_t. Wenn der Kinderprozess erfolgreich erstellt wird.
Wenn ein Fehler vorliegt, wird -1 an den übergeordneten Prozess zurückgegeben und der untergeordnete Prozess nicht erstellt.
Es werden keine Argumente an Gabel übergeben ().Beispiel 1: fork () anrufen ()
Betrachten Sie das folgende Beispiel, in dem wir den Fork () -Systemaufruf verwendet haben, um einen neuen Kinderprozess zu erstellen:
#enthaltenAUSGANG:
sysads@linuxHint $ gcc Fork.C -o GabelIn diesem Programm haben wir fork () verwendet, damit ein neues Kinderprozess erstellt wird. Wenn der Kinderprozess erstellt wird, verweist sowohl der übergeordnete Prozess als auch der untergeordnete Prozess auf die nächste Anweisung (derselbe Programmzähler). Auf diese Weise werden die verbleibenden Anweisungen oder C -Anweisungen ausgeführt, die Gesamtzahl der Prozesszeiten, dh 2N Zeiten, wobei n die Anzahl der Fork () -Systemanrufe ist.
Also, wenn der Fork () -Anruf einmal wie oben verwendet wird (21 = 2) Wir haben unsere Ausgabe 2 Mal.
Wenn der Fork () -Systemaufruf verwendet wird, sieht die interne Struktur aus wie:
Betrachten Sie den folgenden Fall, in dem die Fork () 4 -mal verwendet wird:
#enthaltenAusgang:
sysads@linuxHint $ gcc Fork.C -o GabelJetzt ist die Gesamtzahl der erstellten Prozesse 24 = 16 und wir haben unsere Druckanweisung 16 Mal ausgeführt.
Beispiel 2: Tests, wenn Fork () erfolgreich war
Im folgenden Beispiel haben wir das Entscheidungskonstrukt verwendet, um den von Fork () zurückgegebenen Wert (int) zu testen. Und die entsprechenden Nachrichten werden angezeigt:
#enthaltenAUSGANG:
sysads@linuxHint $ gcc Fork.C -o GabelIm obigen Beispiel haben wir den Typ pid_t verwendet, der den Rückgabewert von Fork () speichert. fork () wird online genannt:
p = fork ();Der von fork () zurückgegebene Ganzzahlwert wird also in P gespeichert und dann wird P mit der Überprüfung verglichen, ob unser Fork () -Aufruf erfolgreich war.
Wenn der Fork () -Anruf verwendet wird und das Kind erfolgreich erstellt wird, wird die ID des Kinderprozesses in den übergeordneten Prozess zurückgegeben und 0 wird an den Kinderprozess zurückgegeben.Die ID des Kinderprozesses im übergeordneten Prozess ist nicht die gleiche wie die ID des Kinderprozesses im Kinderprozess selbst. Im Kinderprozess beträgt die ID des Kinderprozesses 0.
Mit diesem Tutorial können Sie sehen, wie Sie mit dem Fork -Systemaufruf in Linux beginnen.