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:
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:
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.