Funkcija Perl Fork

Funkcija Perl Fork



Fork() je vgrajena funkcija Perla, ki se uporablja za ustvarjanje podrejenega procesa katerega koli tekočega procesa in deluje samo v operacijskih sistemih Linux. Ustvari ločeno kopijo izvajalnega procesa in izvaja oba procesa vzporedno. Torej, če je spremenljivka nadrejenega procesa posodobljena, to ne bo vplivalo na isto spremenljivko nadrejenega procesa ali obratno. Uporaba funkcije fork() v Perlu je prikazana v tej vadnici.

Sintaksa:

Sintaksa funkcije fork() je podana v nadaljevanju. Vrne številsko vrednost ali 'undef'. Če funkcija fork() deluje uspešno, je vrnjen ID določenega procesa ali 0 za podrejeni proces. Vrne 'undef', če funkcija fork() ni uspešna.







id oz undef fork ( ) ;

Primer 1: Preprosta uporaba funkcije Fork().

Ustvarite datoteko Perl z naslednjim skriptom, ki ustvari podrejeni proces iz trenutnega procesa s pomočjo funkcije fork(). ID procesa se natisne po izvedbi funkcije fork(). Spremenljivke nadrejenega in podrejenega procesa so shranjene na različnih pomnilniških lokacijah. Torej, če je vrednost spremenljivke spremenjena v nadrejenem procesu, ne bo naredila nobene spremembe za isto spremenljivko podrejenega procesa ali obratno. V tem skriptu se spremeni spremenljivka nadrejenega procesa. Nato se natisnejo spremenljivke nadrejenega in podrejenega procesa.



#!/usr/bin/perl

uporabite strogo ;
uporaba opozorila ;
uporabi 5.34.0 ;

#Deklarajte spremenljivko
moj $var = 'Testne vilice' ;
#Razcepi trenutni proces
moj $process_id = vilice ( ) ;

#Preverite ID procesa
če ( $process_id < 0 )
{
reči 'Postopka ni mogoče razcepiti.' ;
}
elsif ( $process_id == 0 )
{
reči 'Otroški proces:' ;
#Natisni vrednost spremenljivke podrejenega procesa
reči 'Vrednost spremenljivke: $var' ;
}
drugače
{
reči 'Nadrejeni proces: $process_id' ;
#Posodobite vrednost spremenljivke
$var = 'Testne vilice 2' ;
#Natisni vrednost spremenljivke nadrejenega procesa
reči 'Vrednost spremenljivke: $var' ;
}

Izhod:



Po izvedbi skripta se prikaže naslednji rezultat. Spremenljivka nadrejenega procesa je spremenjena z vrednostjo »Test Fork 2«, vendar spremenljivka podrejenega procesa ostane nespremenjena. Torej je vrednost spremenljivke podrejenega procesa »Test Fork«. To je bila vrednost po forku:





  p1

2. primer: uporaba funkcij Fork() in Wait().

Ustvarite datoteko Perl z naslednjim skriptom, ki prikazuje uporabo funkcije fork() s funkcijo wait(). Na začetku skripta so deklarirane tri spremenljivke. Funkcija sleep() se uporablja znotraj bloka nadrejenega procesa 1 sekundo in znotraj podrejenega procesa 2 sekundi. Vsota obeh spremenljivk se izračuna in shrani v drugo spremenljivko znotraj bloka nadrejenega procesa. Vrednosti obeh spremenljivk se pomnožijo in shranijo na drugo spremenljivko znotraj podrejenega procesa. Funkcija wait() se uporablja na koncu skripta za čakanje na dokončanje naloge enega procesa, preden se začne naloga drugega procesa. Če je funkcija fork() uporabljena večkrat v skriptu in se hkrati izvaja veliko procesov, lahko pride do zastoja. Težavo je mogoče rešiti s funkcijo wait().



#!/usr/bin/perl

uporabite strogo ;
uporaba opozorila ;
uporabi 5.34.0 ;

#Inicializiraj spremenljivke
moj $n1 = 10 ;
moj $n2 = 25 ;
moj $rezultat = 0 ;

#Razcepi trenutni proces
moj $process_id = vilice ( ) ;

#Preverite ID procesa
če ( $process_id == 0 )
{
#Izračunaj množenje števil
reči 'Podrejeni proces: $$' ;
$rezultat = $n1 * $n2 ;
reči 'Počakaj 2 sekundi ... \n ' ;
spati 2 ;
reči 'Množenje $n1 in $n2 je $rezultat.' ;
}
elsif ( $process_id > 0 )
{
#Izračunaj vsoto števil
reči 'Nadrejeni proces: $$' ;
$rezultat = $n1 + $n2 ;
reči 'Počakaj 1 sekundo ... \n ' ;
spati 1 ;
reči 'Vsota $n1 in $n2 je $rezultat.' ;
}
drugače
{
reči 'Postopka ni mogoče razcepiti.' ;
}

#Počakajte, da dokončate opravilo postopka
čakati ( ) ;

Izhod:

Po izvedbi skripta se prikaže naslednji rezultat. Glede na izhod je podrejeni proces uspešno ustvarjen, ID procesa nadrejenega procesa je natisnjen in skript je začasno ustavljen za 1 sekundo, da dokonča nalogo. Nato se natisne ID procesa podrejenega procesa in skript se ustavi za 2 sekundi, da dokonča nalogo. Izhod nadrejenega in podrejenega procesa se natisne pozneje:

  p2

Zaključek

Namen uporabe funkcije Perl fork() je v tej vadnici prikazan z ustvarjanjem podrejenega procesa in izvajanjem različnih vrst nalog znotraj bloka nadrejenega in podrejenega procesa.