Perl-gaffelfunksjonen

Perl Gaffelfunksjonen



Gaffelen() er en innebygd funksjon i Perl som brukes til å lage en underordnet prosess for alle prosesser som kjører, og den fungerer kun på Linux-operativsystemene. Den oppretter en egen kopi av den utførende prosessen og kjører begge prosessene parallelt. Så hvis variabelen til den overordnede prosessen oppdateres, vil den ikke ha noen effekt på den samme variabelen til den underordnede prosessen eller omvendt. Bruken av fork()-funksjonen i Perl er vist i denne opplæringen.

Syntaks:

Syntaksen til fork()-funksjonen er gitt i det følgende. Den returnerer en numerisk verdi eller 'undef'. Hvis fork()-funksjonen fungerer vellykket, returneres en bestemt prosess-ID eller 0 for den underordnede prosessen. Den returnerer 'undef' hvis fork()-funksjonen ikke lykkes.







id eller undef gaffel ( ) ;

Eksempel 1: Enkel bruk av Fork()-funksjonen

Lag en Perl-fil med følgende skript som oppretter en underordnet prosess fra den gjeldende prosessen ved å bruke fork()-funksjonen. Prosess-IDen skrives ut etter å ha utført fork()-funksjonen. Variablene til foreldre- og barneprosessene lagres på forskjellige minneplasseringer. Så hvis verdien av variabelen endres i den overordnede prosessen, vil den ikke gjøre noen endring for den samme variabelen i underordnet prosessen eller omvendt. I dette skriptet endres variabelen til den overordnede prosessen. Deretter skrives variablene for både overordnede og underordnede prosesser ut.



#!/usr/bin/perl

bruk strenge ;
bruk advarsler ;
bruk 5.34.0 ;

#Deklarer en variabel
min $var = 'Testgaffel' ;
#Fork den nåværende prosessen
min $process_id = gaffel ( ) ;

#Sjekk prosess-ID
hvis ( $prosess_id < 0 )
{
si 'Kan ikke splitte prosessen.' ;
}
elsif ( $prosess_id == 0 )
{
si 'Barneprosess:' ;
#Skriv ut verdien av variabelen til underordnet prosessen
si 'Verdien av variabelen: $var' ;
}
ellers
{
si 'Overordnet prosess: $process_id' ;
#Oppdater verdien til variabelen
$var = 'Testgaffel 2' ;
#Skriv ut verdien til variabelen for den overordnede prosessen
si 'Verdien av variabelen: $var' ;
}

Produksjon:



Følgende utdata vises etter utføring av skriptet. Variabelen til den overordnede prosessen modifiseres med 'Test Fork 2'-verdien, men variabelen for den underordnede prosessen forblir uendret. Så verdien av variabelen i barneprosessen er 'Testgaffel'. Det var verdien etter gaffelen:





  p1

Eksempel 2: Bruke Fork() og Wait() funksjonene

Lag en Perl-fil med følgende skript som viser bruken av fork()-funksjonen med wait()-funksjonen. Tre variabler er deklarert i begynnelsen av skriptet. Sleep()-funksjonen brukes inne i blokken til den overordnede prosessen i 1 sekund og inne i den underordnede prosessen i 2 sekunder. Summen av de to variablene beregnes og lagres på en annen variabel inne i blokken til den overordnede prosessen. Verdiene til de to variablene multipliseres og lagres på en annen variabel inne i barneprosessen. wait()-funksjonen brukes på slutten av skriptet for å vente på å fullføre oppgaven til en prosess før du starter oppgaven til en annen prosess. Hvis fork()-funksjonen brukes flere ganger i skriptet og mange prosesser kjører samtidig, kan det oppstå en dødlåssituasjon. Problemet kan løses ved å bruke wait()-funksjonen.



#!/usr/bin/perl

bruk strenge ;
bruk advarsler ;
bruk 5.34.0 ;

#Initialiser variablene
min $n1 = 10 ;
min $n2 = 25 ;
mitt $resultat = 0 ;

#Fork den nåværende prosessen
min $process_id = gaffel ( ) ;

#Sjekk prosess-ID
hvis ( $prosess_id == 0 )
{
#Regn ut multiplikasjonen av tallene
si 'Barneprosess: $$' ;
$resultat = $n1 * $n2 ;
si 'Vent i 2 sekunder... \n ' ;
sove 2 ;
si 'Multiplikasjonen av $n1 og $n2 er $resultat.' ;
}
elsif ( $prosess_id > 0 )
{
#Regn ut summen av tallene
si 'Overordnet prosess: $$' ;
$resultat = $n1 + $n2 ;
si 'Vent i 1 sekund... \n ' ;
sove 1 ;
si 'Summen av $n1 og $n2 er $result.' ;
}
ellers
{
si 'Kan ikke splitte prosessen.' ;
}

#Vent med å fullføre prosessoppgaven
vente ( ) ;

Produksjon:

Følgende utdata vises etter utføring av skriptet. I henhold til utdata blir den underordnede prosessen opprettet, prosess-IDen til den overordnede prosessen skrives ut, og skriptet settes på pause i 1 sekund for å fullføre oppgaven. Deretter skrives prosess-IDen til den underordnede prosessen ut og skriptet settes på pause i 2 sekunder for å fullføre oppgaven. Utdataene fra både overordnede og underordnede prosesser skrives ut senere:

  s2

Konklusjon

Hensikten med å bruke Perl fork()-funksjonen vises i denne opplæringen ved å lage en underordnet prosess og utføre forskjellige typer oppgaver inne i blokken til overordnet og underordnet prosess.