Die Perl-Fork-Funktion

Die Perl Fork Funktion



Bei fork() handelt es sich um eine integrierte Funktion von Perl, die zum Erstellen eines untergeordneten Prozesses eines beliebigen laufenden Prozesses verwendet wird und nur auf Linux-Betriebssystemen funktioniert. Es erstellt eine separate Kopie des ausführenden Prozesses und führt beide Prozesse parallel aus. Wenn also die Variable des übergeordneten Prozesses aktualisiert wird, hat dies keine Auswirkungen auf dieselbe Variable des untergeordneten Prozesses oder umgekehrt. Die Verwendung der Funktion fork() in Perl wird in diesem Tutorial gezeigt.

Syntax:

Die Syntax der fork()-Funktion ist im Folgenden angegeben. Es gibt einen numerischen Wert oder „undef“ zurück. Wenn die Funktion fork() erfolgreich funktioniert, wird eine bestimmte Prozess-ID zurückgegeben oder 0 für den untergeordneten Prozess. Es gibt „undef“ zurück, wenn die Funktion fork() nicht erfolgreich ist.







Ausweis oder undef fork ( ) ;

Beispiel 1: Einfache Verwendung der Fork()-Funktion

Erstellen Sie eine Perl-Datei mit dem folgenden Skript, das mithilfe der Funktion fork() einen untergeordneten Prozess aus dem aktuellen Prozess erstellt. Die Prozess-ID wird nach Ausführung der Funktion fork() gedruckt. Die Variablen des übergeordneten und des untergeordneten Prozesses werden an unterschiedlichen Speicherorten gespeichert. Wenn also der Wert der Variablen im übergeordneten Prozess geändert wird, wird keine Änderung für dieselbe Variable im untergeordneten Prozess vorgenommen oder umgekehrt. In diesem Skript wird die Variable des übergeordneten Prozesses geändert. Anschließend werden die Variablen der übergeordneten und untergeordneten Prozesse gedruckt.



#!/usr/bin/perl

verwenden Sie streng ;
verwenden Warnungen ;
Verwenden Sie 5.34.0 ;

#Deklarieren Sie eine Variable
mein $var = „Testgabel“ ;
#Forken Sie den aktuellen Prozess
meine $process_id = Gabel ( ) ;

#Überprüfen Sie die Prozess-ID
Wenn ( $process_id < 0 )
{
sagen „Der Prozess kann nicht geforkt werden.“ ;
}
elsif ( $process_id == 0 )
{
sagen „Untergeordneter Prozess:“ ;
#Drucken Sie den Wert der Variablen des untergeordneten Prozesses
sagen „Der Wert der Variablen: $var“ ;
}
anders
{
sagen „Übergeordneter Prozess: $process_id“ ;
#Aktualisieren Sie den Wert der Variablen
$var = „Testgabel 2“ ;
#Drucken Sie den Wert der Variablen des übergeordneten Prozesses
sagen „Der Wert der Variablen: $var“ ;
}

Ausgabe:



Nach der Ausführung des Skripts erscheint die folgende Ausgabe. Die Variable des übergeordneten Prozesses wird mit dem Wert „Test Fork 2“ geändert, die Variable des untergeordneten Prozesses bleibt jedoch unverändert. Der Wert der Variablen des untergeordneten Prozesses ist also „Test Fork“. Das war der Wert nach der Gabelung:





  p1

Beispiel 2: Verwendung der Funktionen Fork() und Wait()

Erstellen Sie eine Perl-Datei mit dem folgenden Skript, das die Verwendung der Funktion fork() mit der Funktion wait() zeigt. Am Anfang des Skripts werden drei Variablen deklariert. Die Funktion „sleep()“ wird innerhalb des Blocks des übergeordneten Prozesses für 1 Sekunde und innerhalb des untergeordneten Prozesses für 2 Sekunden verwendet. Die Summe der beiden Variablen wird berechnet und in einer anderen Variablen im Block des übergeordneten Prozesses gespeichert. Die Werte der beiden Variablen werden multipliziert und in einer anderen Variablen innerhalb des untergeordneten Prozesses gespeichert. Die Funktion „wait()“ wird am Ende des Skripts verwendet, um auf den Abschluss der Aufgabe eines Prozesses zu warten, bevor die Aufgabe eines anderen Prozesses gestartet wird. Wenn die Funktion fork() mehrfach im Skript verwendet wird und viele Prozesse gleichzeitig laufen, kann es zu einer Deadlock-Situation kommen. Das Problem kann mit der Funktion wait() gelöst werden.



#!/usr/bin/perl

verwenden Sie streng ;
verwenden Warnungen ;
Verwenden Sie 5.34.0 ;

#Initialisieren Sie die Variablen
mein $n1 = 10 ;
mein $n2 = 25 ;
mein $ergebnis = 0 ;

#Forken Sie den aktuellen Prozess
meine $process_id = Gabel ( ) ;

#Überprüfen Sie die Prozess-ID
Wenn ( $process_id == 0 )
{
#Berechnen Sie die Multiplikation der Zahlen
sagen „Untergeordneter Prozess: $$“ ;
$ergebnis = $n1 * $n2 ;
sagen „Warte 2 Sekunden...“ \N ' ;
schlafen 2 ;
sagen „Die Multiplikation von $n1 und $n2 ist $result.“ ;
}
elsif ( $process_id > 0 )
{
#Berechnen Sie die Summe der Zahlen
sagen „Übergeordneter Prozess: $$“ ;
$ergebnis = $n1 + $n2 ;
sagen „Warte 1 Sekunde...“ \N ' ;
schlafen 1 ;
sagen „Die Summe von $n1 und $n2 ist $result.“ ;
}
anders
{
sagen „Der Prozess kann nicht geforkt werden.“ ;
}

#Warten Sie, bis die Prozessaufgabe abgeschlossen ist
Warten ( ) ;

Ausgabe:

Nach der Ausführung des Skripts erscheint die folgende Ausgabe. Der Ausgabe zufolge wurde der untergeordnete Prozess erfolgreich erstellt, die Prozess-ID des übergeordneten Prozesses wird gedruckt und das Skript wird für 1 Sekunde angehalten, um die Aufgabe abzuschließen. Als nächstes wird die Prozess-ID des untergeordneten Prozesses gedruckt und das Skript wird für 2 Sekunden angehalten, um die Aufgabe abzuschließen. Die Ausgabe der übergeordneten und untergeordneten Prozesse wird später gedruckt:

  p2

Abschluss

Der Zweck der Verwendung der Perl-Funktion fork() wird in diesem Tutorial gezeigt, indem ein untergeordneter Prozess erstellt und verschiedene Arten von Aufgaben innerhalb des Blocks der übergeordneten und untergeordneten Prozesse ausgeführt werden.