Perl-gaffelfunktionen

Perl Gaffelfunktionen



Fork() är en inbyggd funktion i Perl som används för att skapa en underordnad process av alla pågående processer och den fungerar endast på Linux-operativsystemen. Den skapar en separat kopia av exekveringsprocessen och kör båda processerna parallellt. Så om variabeln för den överordnade processen uppdateras, kommer den inte att ha någon effekt på samma variabel i den underordnade processen eller vice versa. Användningen av funktionen gaffel() i Perl visas i denna handledning.

Syntax:

Syntaxen för funktionen gaffel() ges i det följande. Det returnerar ett numeriskt värde eller 'undef'. Om funktionen fork() fungerar framgångsrikt returneras ett visst process-ID eller så returneras 0 för den underordnade processen. Den returnerar 'undef' om funktionen fork() misslyckas.







id eller undef gaffel ( ) ;

Exempel 1: Enkel användning av Fork()-funktionen

Skapa en Perl-fil med följande skript som skapar en underordnad process från den aktuella processen med hjälp av funktionen fork(). Process-ID:t skrivs ut efter exekvering av funktionen fork(). Variablerna för förälder- och barnprocesserna lagras på olika minnesplatser. Så om värdet på variabeln ändras i den överordnade processen, kommer den inte att göra någon förändring för samma variabel i den underordnade processen eller vice versa. I det här skriptet ändras variabeln för den överordnade processen. Sedan skrivs variablerna för både överordnade och underordnade processer ut.



#!/usr/bin/perl

använd strikt ;
använda sig av varningar ;
använd 5.34.0 ;

#Deklarera en variabel
my $var = 'Testgaffel' ;
#Forka den nuvarande processen
mitt $process_id = gaffel ( ) ;

#Kontrollera process-id
om ( $process_id < 0 )
{
säga 'Det går inte att splittra processen.' ;
}
elsif ( $process_id == 0 )
{
säga 'Barnprocess:' ;
#Skriv ut värdet för variabeln för den underordnade processen
säga 'Värdet på variabeln: $var' ;
}
annan
{
säga 'Föräldraprocess: $process_id' ;
#Uppdatera värdet på variabeln
$var = 'Testgaffel 2' ;
#Skriv ut värdet för variabeln för den överordnade processen
säga 'Värdet på variabeln: $var' ;
}

Produktion:



Följande utdata visas efter exekvering av skriptet. Variabeln för den överordnade processen modifieras med värdet 'Test Gaffel 2' men variabeln för den underordnade processen förblir oförändrad. Så, värdet på variabeln för den underordnade processen är 'Testgaffel'. Det var värdet efter gaffeln:





  p1

Exempel 2: Använda funktionerna Fork() och Wait().

Skapa en Perl-fil med följande skript som visar användningen av funktionen fork() med funktionen wait(). Tre variabler deklareras i början av skriptet. Sleep()-funktionen används inuti blocket av föräldraprocessen i 1 sekund och inuti den underordnade processen i 2 sekunder. Summan av de två variablerna beräknas och lagras på en annan variabel inuti blocket för den överordnade processen. Värdena för de två variablerna multipliceras och lagras på en annan variabel i den underordnade processen. wait()-funktionen används i slutet av skriptet för att vänta på att en process har slutförts innan uppgiften för en annan process påbörjas. Om funktionen fork() används flera gånger i skriptet och många processer körs samtidigt, kan en dödlägessituation uppstå. Problemet kan lösas med hjälp av wait()-funktionen.



#!/usr/bin/perl

använd strikt ;
använda sig av varningar ;
använd 5.34.0 ;

#Initiera variablerna
min $n1 = 10 ;
min $n2 = 25 ;
mitt $resultat = 0 ;

#Forka den nuvarande processen
mitt $process_id = gaffel ( ) ;

#Kontrollera process-id
om ( $process_id == 0 )
{
#Beräkna multiplikationen av talen
säga 'Barnprocess: $$' ;
$resultat = $n1 * $n2 ;
säga 'Vänta i 2 sekunder... \n ' ;
sova 2 ;
säga 'Multiplikationen av $n1 och $n2 är $result.' ;
}
elsif ( $process_id > 0 )
{
#Beräkna summan av talen
säga 'Föräldraprocess: $$' ;
$resultat = $n1 + $n2 ;
säga 'Vänta i 1 sekund... \n ' ;
sova 1 ;
säga 'Summan av $n1 och $n2 är $result.' ;
}
annan
{
säga 'Det går inte att splittra processen.' ;
}

#Vänta med att slutföra processuppgiften
vänta ( ) ;

Produktion:

Följande utdata visas efter exekvering av skriptet. Enligt resultatet skapas den underordnade processen framgångsrikt, process-ID:t för den överordnade processen skrivs ut och skriptet pausas i 1 sekund för att slutföra uppgiften. Därefter skrivs process-ID för den underordnade processen ut och skriptet pausas i 2 sekunder för att slutföra uppgiften. Utdata från både överordnade och underordnade processer skrivs ut senare:

  p2

Slutsats

Syftet med att använda Perl fork()-funktionen visas i den här handledningen genom att skapa en underordnad process och utföra olika typer av uppgifter i blocket för förälder- och underprocesserna.