Funcția Perl Fork

Functia Perl Fork



Fork() este o funcție încorporată a lui Perl care este folosită pentru a crea un proces copil al oricărui proces care rulează și funcționează numai pe sistemele de operare Linux. Acesta creează o copie separată a procesului de execuție și rulează ambele procese în paralel. Deci, dacă variabila procesului părinte este actualizată, aceasta nu va avea niciun efect asupra aceleiași variabile a procesului copil sau invers. Utilizările funcției fork() în Perl sunt prezentate în acest tutorial.

Sintaxă:

Sintaxa funcției fork() este dată în cele ce urmează. Returnează o valoare numerică sau „undef”. Dacă funcția fork() funcționează cu succes, este returnat un anumit ID de proces sau este returnat 0 pentru procesul copil. Returnează „undef” dacă funcția fork() nu reușește.







id sau undef furk ( ) ;

Exemplul 1: Utilizarea simplă a funcției Fork().

Creați un fișier Perl cu următorul script care creează un proces copil din procesul curent folosind funcția fork(). ID-ul procesului este tipărit după executarea funcției fork(). Variabilele proceselor părinte și copil sunt stocate în diferite locații de memorie. Deci, dacă valoarea variabilei este modificată în procesul părinte, aceasta nu va face nicio modificare pentru aceeași variabilă a procesului copil sau invers. În acest script, variabila procesului părinte este schimbată. Apoi, variabilele ambelor procese părinte și fii sunt tipărite.



#!/usr/bin/perl

folosiți strict ;
utilizare Avertizări ;
utilizați 5.34.0 ;

#Declară o variabilă
mea $var = 'Fork de testare' ;
#Fork procesul actual
meu $process_id = furculiţă ( ) ;

#Verificați id-ul procesului
dacă ( $proces_id < 0 )
{
Spune „Nu se poate întrerupe procesul”. ;
}
elsif ( $proces_id == 0 )
{
Spune „Procesul copilului:” ;
#Tipărește valoarea variabilei procesului copil
Spune „Valoarea variabilei: $var” ;
}
altfel
{
Spune „Procesul părinte: $process_id” ;
#Actualizați valoarea variabilei
$var = „Test Furk 2” ;
#Tipărește valoarea variabilei procesului părinte
Spune „Valoarea variabilei: $var” ;
}

Ieșire:



Următoarea ieșire apare după executarea scriptului. Variabila procesului părinte este modificată cu valoarea „Test Fork 2”, dar variabila procesului copil rămâne neschimbată. Deci, valoarea variabilei procesului copil este „Test Fork”. Aceasta a fost valoarea de după bifurcație:





  p1

Exemplul 2: Utilizarea funcțiilor Fork() și Wait().

Creați un fișier Perl cu următorul script care arată utilizarea funcției fork() cu funcția wait(). Trei variabile sunt declarate la începutul scriptului. Funcția sleep() este utilizată în blocul procesului părinte timp de 1 secundă și în interiorul procesului copil timp de 2 secunde. Suma celor două variabile este calculată și stocată pe o altă variabilă în interiorul blocului procesului părinte. Valorile celor două variabile sunt înmulțite și stocate pe o altă variabilă în interiorul procesului copil. Funcția wait() este utilizată la sfârșitul scriptului pentru a aștepta finalizarea sarcinii unui proces înainte de a începe sarcina altui proces. Dacă funcția fork() este utilizată de mai multe ori în script și multe procese rulează în același timp, poate apărea o situație de blocaj. Problema poate fi rezolvată folosind funcția wait().



#!/usr/bin/perl

folosiți strict ;
utilizare Avertizări ;
utilizați 5.34.0 ;

#Inițializați variabilele
meu $n1 = 10 ;
$n2 al meu = 25 ;
$rezultatul meu = 0 ;

#Fork procesul actual
meu $process_id = furculiţă ( ) ;

#Verificați id-ul procesului
dacă ( $proces_id == 0 )
{
#Calculează înmulțirea numerelor
Spune „Procesul copilului: $$” ;
$rezultat = $n1 * $n2 ;
Spune 'Așteptați 2 secunde... \n ' ;
dormi 2 ;
Spune 'Înmulțirea lui $n1 și $n2 este $rezultat.' ;
}
elsif ( $proces_id > 0 )
{
#Calculează suma numerelor
Spune „Procesul părinte: $$” ;
$rezultat = $n1 + $n2 ;
Spune 'Așteptați o secundă... \n ' ;
dormi 1 ;
Spune 'Suma $n1 și $n2 este $rezultat.' ;
}
altfel
{
Spune „Nu se poate întrerupe procesul”. ;
}

#Așteptați pentru a finaliza sarcina procesului
aștepta ( ) ;

Ieșire:

Următoarea ieșire apare după executarea scriptului. Conform rezultatelor, procesul copil este creat cu succes, ID-ul procesului al procesului părinte este tipărit, iar scriptul este întrerupt timp de 1 secundă pentru a finaliza sarcina. Apoi, ID-ul procesului al procesului copil este tipărit și scriptul este întrerupt timp de 2 secunde pentru a finaliza sarcina. Ieșirea ambelor procese părinte și copil este tipărită mai târziu:

  p2

Concluzie

Scopul utilizării funcției Perl fork() este prezentat în acest tutorial prin crearea unui proces copil și efectuarea diferitelor tipuri de sarcini în interiorul blocului proceselor părinte și copil.