Perlo šakutės funkcija

Perlo Sakutes Funkcija



Fork () yra integruota „Perl“ funkcija, naudojama bet kurio veikiančio proceso antriniam procesui sukurti ir veikia tik „Linux“ operacinėse sistemose. Jis sukuria atskirą vykdomojo proceso kopiją ir abu procesus vykdo lygiagrečiai. Taigi, jei atnaujinamas pirminio proceso kintamasis, tai neturės jokios įtakos tam pačiam antrinio proceso kintamajam ir atvirkščiai. Fork() funkcijos naudojimas Perl yra parodytas šioje pamokoje.

Sintaksė:

Fork() funkcijos sintaksė pateikiama toliau. Jis grąžina skaitinę reikšmę arba „undef“. Jei funkcija fork() veikia sėkmingai, grąžinamas konkretus proceso ID arba antriniam procesui grąžinamas 0. Jis grąžina „undef“, jei funkcija fork () yra nesėkminga.







id arba undef šakutė ( ) ;

1 pavyzdys: paprastas Fork() funkcijos naudojimas

Sukurkite Perl failą su šiuo scenarijumi, kuris sukuria antrinį procesą iš dabartinio proceso naudojant fork() funkciją. Proceso ID išspausdinamas įvykdžius fork() funkciją. Pirminio ir antrinio procesų kintamieji saugomi skirtingose ​​atminties vietose. Taigi, jei kintamojo reikšmė pakeičiama pirminiame procese, tai nepadarys jokių pakeitimų tam pačiam antrinio proceso kintamajam ir atvirkščiai. Šiame scenarijuje pakeičiamas pirminio proceso kintamasis. Tada atspausdinami pirminio ir antrinio procesų kintamieji.



#!/usr/bin/perl

naudoti griežtai ;
naudoti įspėjimai ;
naudoti 5.34.0 ;

#Deklaruoti kintamąjį
mano $var = „Išbandymo šakutė“ ;
#Šakė dabartinį procesą
mano $proceso_id = šakutė ( ) ;

#Patikrinkite proceso ID
jeigu ( $proceso_id < 0 )
{
pasakyti „Neįmanoma atšaukti proceso“. ;
}
elsif ( $proceso_id == 0 )
{
pasakyti „Vaiko procesas“: ;
#Atspausdinkite antrinio proceso kintamojo reikšmę
pasakyti 'Kintamojo reikšmė: $var' ;
}
Kitas
{
pasakyti „Pagrindinis procesas: $process_id“ ;
#Atnaujinkite kintamojo reikšmę
$var = 'Test Fork 2' ;
#Atspausdinkite pirminio proceso kintamojo reikšmę
pasakyti 'Kintamojo reikšmė: $var' ;
}

Išvestis:



Įvykdžius scenarijų pasirodo ši išvestis. Pirminio proceso kintamasis modifikuojamas naudojant „Test Fork 2“ reikšmę, tačiau antrinio proceso kintamasis lieka nepakitęs. Taigi, antrinio proceso kintamojo reikšmė yra „Test Fork“. Tai buvo reikšmė po šakės:





  p1

2 pavyzdys: Fork() ir Wait() funkcijų naudojimas

Sukurkite Perl failą su šiuo scenarijumi, kuriame parodyta, kaip naudojama funkcija fork() su funkcija wait(). Scenarijaus pradžioje deklaruojami trys kintamieji. Funkcija „Sleep()“ naudojama pirminio proceso bloke 1 sekundę ir antrinio proceso viduje 2 sekundes. Dviejų kintamųjų suma apskaičiuojama ir saugoma kitame kintamajame pagrindinio proceso bloke. Dviejų kintamųjų reikšmės padauginamos ir saugomos kitame antrinio proceso kintamajame. Funkcija wait () naudojama scenarijaus pabaigoje, norint palaukti, kol bus baigta vieno proceso užduotis, prieš pradedant kito proceso užduotį. Jei scenarijuje funkcija fork() naudojama kelis kartus ir vienu metu veikia daug procesų, gali kilti aklavietės situacija. Problemą galima išspręsti naudojant laukimo () funkciją.



#!/usr/bin/perl

naudoti griežtai ;
naudoti įspėjimai ;
naudoti 5.34.0 ;

#Inicijuokite kintamuosius
mano $n1 = 10 ;
mano $n2 = 25 ;
mano $ rezultatas = 0 ;

#Šakė dabartinį procesą
mano $process_id = šakutė ( ) ;

#Patikrinkite proceso ID
jeigu ( $proceso_id == 0 )
{
#Apskaičiuokite skaičių dauginimą
pasakyti „Vaikų procesas: $$“ ;
$ rezultatas = $n1 * $n2 ;
pasakyti 'Palauk 2 sekundes... \n ;
miegoti 2 ;
pasakyti '$n1 ir $n2 padauginimas yra $rezultatas.' ;
}
elsif ( $proceso_id > 0 )
{
#Apskaičiuokite skaičių sumą
pasakyti „Tėvų procesas: $$“ ;
$ rezultatas = $n1 + $n2 ;
pasakyti 'Palauk 1 sekundę... \n ;
miegoti 1 ;
pasakyti '$n1 ir $n2 suma yra $rezultatas.' ;
}
Kitas
{
pasakyti „Neįmanoma atšaukti proceso“. ;
}

# Palaukite, kol užbaigsite proceso užduotį
laukti ( ) ;

Išvestis:

Įvykdžius scenarijų pasirodo ši išvestis. Pagal išvestį antrinis procesas sėkmingai sukurtas, atspausdinamas pirminio proceso ID ir scenarijus pristabdomas 1 sekundei, kad būtų atlikta užduotis. Tada išspausdinamas antrinio proceso ID ir scenarijus pristabdomas 2 sekundėms, kad būtų atlikta užduotis. Tiek pirminių, tiek antrinių procesų išvestis išspausdinama vėliau:

  p2

Išvada

Perl fork() funkcijos naudojimo tikslas parodytas šioje pamokoje, sukuriant antrinį procesą ir atliekant įvairių tipų užduotis pirminio ir antrinio procesų bloke.