Perl Fork-funktionen

Perl Fork Funktionen



Fork() er en indbygget funktion i Perl, der bruges til at oprette en underordnet proces af enhver kørende proces, og den virker kun på Linux-operativsystemerne. Den opretter en separat kopi af den eksekverende proces og kører begge processer parallelt. Så hvis variablen i den overordnede proces opdateres, vil den ikke have nogen effekt på den samme variabel i den underordnede proces eller omvendt. Brugen af ​​funktionen fork() i Perl er vist i denne vejledning.

Syntaks:

Syntaksen for funktionen fork() er givet i det følgende. Det returnerer en numerisk værdi eller 'undef'. Hvis fork()-funktionen fungerer korrekt, returneres et bestemt proces-id, eller 0 returneres for den underordnede proces. Det returnerer 'undef', hvis funktionen fork() ikke lykkes.







id eller undef gaffel ( ) ;

Eksempel 1: Simpel brug af Fork()-funktionen

Opret en Perl-fil med følgende script, der opretter en underordnet proces fra den aktuelle proces ved hjælp af fork()-funktionen. Proces-id'et udskrives efter udførelse af fork()-funktionen. Variablerne for forælder- og underordnede processer gemmes på forskellige hukommelsesplaceringer. Så hvis værdien af ​​variablen ændres i den overordnede proces, vil den ikke foretage nogen ændring for den samme variabel i den underordnede proces eller omvendt. I dette script ændres variablen for den overordnede proces. Derefter udskrives variablerne for både overordnede og underordnede processer.



#!/usr/bin/perl

brug strenge ;
brug advarsler ;
brug 5.34.0 ;

#Deklarer en variabel
min $var = 'Test gaffel' ;
#Fork den nuværende proces
mit $proces_id = gaffel ( ) ;

#Tjek proces-id'et
hvis ( $proces_id < 0 )
{
sige 'I stand til at forgrene processen.' ;
}
elsif ( $proces_id == 0 )
{
sige 'Børneproces:' ;
#Udskriv værdien af ​​variablen i den underordnede proces
sige 'Værdien af ​​variablen: $var' ;
}
andet
{
sige 'Overordnet proces: $process_id' ;
#Opdater værdien af ​​variablen
$var = 'Test Fork 2' ;
#Udskriv værdien af ​​variablen for den overordnede proces
sige 'Værdien af ​​variablen: $var' ;
}

Produktion:



Følgende output vises efter eksekvering af scriptet. Variablen for den overordnede proces ændres med værdien 'Test Fork 2', men variablen for den underordnede proces forbliver uændret. Så værdien af ​​variablen i den underordnede proces er 'Test Fork'. Det var værdien efter gaflen:





  p1

Eksempel 2: Brug af funktionerne Fork() og Wait().

Opret en Perl-fil med følgende script, der viser brugen af ​​funktionen fork() med funktionen wait(). Tre variable er deklareret i begyndelsen af ​​scriptet. Sleep()-funktionen bruges inde i blokken af ​​den overordnede proces i 1 sekund og inde i den underordnede proces i 2 sekunder. Summen af ​​de to variable beregnes og gemmes på en anden variabel inde i blokken af ​​moderprocessen. Værdierne af de to variable ganges og gemmes på en anden variabel inde i den underordnede proces. wait()-funktionen bruges i slutningen af ​​scriptet til at vente på at fuldføre opgaven i én proces, før opgaven i en anden proces startes. Hvis funktionen fork() bruges flere gange i scriptet, og mange processer kører på samme tid, kan der opstå en deadlock-situation. Problemet kan løses ved hjælp af wait()-funktionen.



#!/usr/bin/perl

brug strenge ;
brug advarsler ;
brug 5.34.0 ;

#Initialiser variablerne
min $n1 = 10 ;
min $n2 = 25 ;
mit $resultat = 0 ;

#Fork den nuværende proces
mit $proces_id = gaffel ( ) ;

#Tjek proces-id'et
hvis ( $proces_id == 0 )
{
#Beregn multiplikationen af ​​tallene
sige 'Børneproces: $$' ;
$resultat = $n1 * $n2 ;
sige 'Vent i 2 sekunder... \n ' ;
søvn 2 ;
sige 'Multiplikationen af ​​$n1 og $n2 er $resultat.' ;
}
elsif ( $proces_id > 0 )
{
#Beregn summen af ​​tallene
sige 'Forældreproces: $$' ;
$resultat = $n1 + $n2 ;
sige 'Vent i 1 sekund... \n ' ;
søvn 1 ;
sige 'Summen af ​​$n1 og $n2 er $resultat.' ;
}
andet
{
sige 'I stand til at forgrene processen.' ;
}

#Vent med at fuldføre procesopgaven
vente ( ) ;

Produktion:

Følgende output vises efter eksekvering af scriptet. I henhold til outputtet oprettes den underordnede proces med succes, proces-id'et for den overordnede proces udskrives, og scriptet sættes på pause i 1 sekund for at fuldføre opgaven. Derefter udskrives proces-id'et for den underordnede proces, og scriptet sættes på pause i 2 sekunder for at fuldføre opgaven. Outputtet af både overordnede og underordnede processer udskrives senere:

  s2

Konklusion

Formålet med at bruge Perl fork()-funktionen er vist i denne tutorial ved at oprette en underordnet proces og udføre forskellige typer opgaver inde i blokken af ​​forælder- og underprocesserne.