Sintaksa:
Sintaksa funkcije fork() dana je u nastavku. Vraća numeričku vrijednost ili 'undef'. Ako funkcija fork() radi uspješno, vraća se ID određenog procesa ili se vraća 0 za proces dijete. Vraća 'undef' ako je funkcija fork() neuspješna.
iskaznica ili undef vilica ( ) ;
Primjer 1: Jednostavna upotreba funkcije Fork().
Stvorite Perl datoteku sa sljedećom skriptom koja stvara podređeni proces iz trenutnog procesa pomoću funkcije fork(). ID procesa ispisuje se nakon izvršavanja funkcije fork(). Varijable procesa roditelja i djeteta pohranjene su na različitim memorijskim mjestima. Dakle, ako je vrijednost varijable promijenjena u nadređenom procesu, to neće učiniti nikakvu promjenu za istu varijablu podređenog procesa ili obrnuto. U ovoj skripti mijenja se varijabla nadređenog procesa. Zatim se ispisuju varijable procesa roditelja i procesa djeteta.
#!/usr/bin/perl
koristite strogi ;
koristiti upozorenja ;
koristiti 5.34.0 ;
#Deklarirajte varijablu
moj $var = 'Testna vilica' ;
#Fork trenutni proces
moj $process_id = vilica ( ) ;
#Provjerite ID procesa
ako ( $process_id < 0 )
{
reći 'Nije moguće pokrenuti proces.' ;
}
elsif ( $process_id == 0 )
{
reći 'Proces djeteta:' ;
#Ispiši vrijednost varijable procesa djeteta
reći 'Vrijednost varijable: $var' ;
}
drugo
{
reći 'Nadređeni proces: $process_id' ;
#Ažuriraj vrijednost varijable
$var = 'Testna vilica 2' ;
#Ispiši vrijednost varijable nadređenog procesa
reći 'Vrijednost varijable: $var' ;
}
Izlaz:
Nakon izvršavanja skripte pojavljuje se sljedeći izlaz. Varijabla nadređenog procesa modificira se s vrijednošću 'Test Fork 2', ali varijabla podređenog procesa ostaje nepromijenjena. Dakle, vrijednost varijable procesa djeteta je 'Test Fork'. To je bila vrijednost nakon forka:
Primjer 2: Korištenje funkcija Fork() i Wait().
Stvorite Perl datoteku sa sljedećom skriptom koja prikazuje upotrebu funkcije fork() s funkcijom wait(). Na početku skripte deklarirane su tri varijable. Funkcija sleep() koristi se unutar bloka nadređenog procesa 1 sekundu i unutar podređenog procesa 2 sekunde. Zbroj dviju varijabli izračunava se i pohranjuje na drugu varijablu unutar bloka nadređenog procesa. Vrijednosti dviju varijabli se množe i pohranjuju na drugu varijablu unutar procesa djeteta. Funkcija wait() koristi se na kraju skripte za čekanje dovršetka zadatka jednog procesa prije pokretanja zadatka drugog procesa. Ako se funkcija fork() koristi više puta u skripti i mnogi se procesi izvode u isto vrijeme, može doći do zastoja. Problem se može riješiti pomoću funkcije wait().
#!/usr/bin/perl
koristite strogi ;
koristiti upozorenja ;
koristiti 5.34.0 ;
#Inicijalizirajte varijable
moj $n1 = 10 ;
moj $n2 = 25 ;
moj $rezultat = 0 ;
#Fork trenutni proces
moj $process_id = vilica ( ) ;
#Provjerite ID procesa
ako ( $process_id == 0 )
{
#Izračunaj množenje brojeva
reći 'Proces dijete: $$' ;
$rezultat = $n1 * $n2 ;
reći 'Pričekajte 2 sekunde... \n ' ;
spavati 2 ;
reći 'Množenje $n1 i $n2 je $rezultat.' ;
}
elsif ( $process_id > 0 )
{
#Izračunaj zbroj brojeva
reći 'Nadređeni proces: $$' ;
$rezultat = $n1 + $n2 ;
reći 'Pričekajte 1 sekundu... \n ' ;
spavati 1 ;
reći 'Zbroj $n1 i $n2 je $rezultat.' ;
}
drugo
{
reći 'Nije moguće pokrenuti proces.' ;
}
#Pričekajte da dovršite zadatak procesa
čekati ( ) ;
Izlaz:
Nakon izvršavanja skripte pojavljuje se sljedeći izlaz. Prema izlazu, podređeni proces je uspješno kreiran, ispisuje se ID procesa nadređenog procesa, a skripta se pauzira na 1 sekundu kako bi se dovršio zadatak. Zatim se ispisuje ID procesa podređenog procesa i skripta se pauzira na 2 sekunde da dovrši zadatak. Izlaz oba procesa roditelja i djeteta ispisuje se kasnije:
Zaključak
Svrha korištenja funkcije Perl fork() prikazana je u ovom vodiču stvaranjem procesa djeteta i izvođenjem različitih vrsta zadataka unutar bloka procesa roditelja i procesa djeteta.