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:
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:
Išvada
Perl fork() funkcijos naudojimo tikslas parodytas šioje pamokoje, sukuriant antrinį procesą ir atliekant įvairių tipų užduotis pirminio ir antrinio procesų bloke.