Funkcija Perl Fork

Funkcija Perl Fork



Fork() je ugrađena funkcija Perla koja se koristi za stvaranje procesa djeteta bilo kojeg pokrenutog procesa i radi samo na operativnim sustavima Linux. Stvara zasebnu kopiju procesa koji se izvršava i pokreće oba procesa paralelno. Dakle, ako se varijabla nadređenog procesa ažurira, to neće imati nikakav učinak na istu varijablu nadređenog procesa ili obrnuto. Upotreba funkcije fork() u Perlu prikazana je u ovom vodiču.

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:





  p1

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:

  p2

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.