Perl Fork -funktio

Perl Fork Funktio



Fork() on Perlin sisäänrakennettu funktio, jota käytetään luomaan aliprosessi mistä tahansa käynnissä olevasta prosessista ja se toimii vain Linux-käyttöjärjestelmissä. Se luo erillisen kopion suoritusprosessista ja suorittaa molemmat prosessit rinnakkain. Joten jos emoprosessin muuttuja päivitetään, sillä ei ole mitään vaikutusta aliprosessin samaan muuttujaan tai päinvastoin. Fork()-funktion käyttö Perlissä on esitetty tässä opetusohjelmassa.

Syntaksi:

Fork()-funktion syntaksi on annettu seuraavassa. Se palauttaa numeerisen arvon tai 'undef'. Jos fork()-funktio toimii onnistuneesti, palautetaan tietty prosessitunnus tai 0 palautetaan aliprosessille. Se palauttaa 'undef', jos fork()-toiminto ei onnistu.







id tai undef haarukka ( ) ;

Esimerkki 1: Fork()-funktion yksinkertainen käyttö

Luo Perl-tiedosto seuraavalla komentosarjalla, joka luo aliprosessin nykyisestä prosessista käyttämällä fork()-funktiota. Prosessin tunnus tulostetaan fork()-funktion suorittamisen jälkeen. Pää- ja lapsiprosessien muuttujat on tallennettu eri muistipaikkoihin. Joten jos muuttujan arvoa muutetaan emoprosessissa, se ei tee muutoksia samalle aliprosessin muuttujalle tai päinvastoin. Tässä komentosarjassa emoprosessin muuttuja muutetaan. Sitten tulostetaan sekä emo- että aliprosessien muuttujat.



#!/usr/bin/perl

käytä tiukkaa ;
käyttää varoitukset ;
käytä 5.34.0 ;

#Ilmoita muuttuja
minun $var = 'Testihaarukka' ;
#Katkaise nykyinen prosessi
minun $prosessitunnus = haarukka ( ) ;

#Tarkista prosessin tunnus
jos ( $prosessin_tunnus < 0 )
{
sanoa 'Prosessia ei voi kääntää.' ;
}
elsif ( $prosessin_tunnus == 0 )
{
sanoa 'Lapsiprosessi:' ;
#Tulosta aliprosessin muuttujan arvo
sanoa 'Muuttujan arvo: $var' ;
}
muu
{
sanoa 'Pääprosessi: $prosessin_tunnus' ;
#Päivitä muuttujan arvo
$var = 'Testihaarukka 2' ;
#Tulosta emoprosessin muuttujan arvo
sanoa 'Muuttujan arvo: $var' ;
}

Lähtö:



Seuraava tulos tulee näkyviin komentosarjan suorittamisen jälkeen. Pääprosessin muuttujaa muutetaan 'Test Fork 2' -arvolla, mutta aliprosessin muuttuja pysyy ennallaan. Joten lapsiprosessin muuttujan arvo on 'Test Fork'. Tämä oli arvo haarukan jälkeen:





  p1

Esimerkki 2: Fork()- ja Wait()-funktioiden käyttäminen

Luo Perl-tiedosto seuraavalla skriptillä, joka näyttää fork()-funktion käytön wait()-funktion kanssa. Skriptin alussa ilmoitetaan kolme muuttujaa. Sleep()-funktiota käytetään pääprosessin lohkossa 1 sekunnin ajan ja lapsiprosessin sisällä 2 sekunnin ajan. Kahden muuttujan summa lasketaan ja tallennetaan toiseen muuttujaan emoprosessin lohkon sisällä. Kahden muuttujan arvot kerrotaan ja tallennetaan toiseen muuttujaan lapsiprosessin sisällä. wait()-funktiota käytetään komentosarjan lopussa odottamaan yhden prosessin tehtävän suorittamista ennen toisen prosessin tehtävän aloittamista. Jos fork()-funktiota käytetään useita kertoja skriptissä ja useita prosesseja on käynnissä samanaikaisesti, voi syntyä lukkiutumistilanne. Ongelma voidaan ratkaista käyttämällä wait()-funktiota.



#!/usr/bin/perl

käytä tiukkaa ;
käyttää varoitukset ;
käytä 5.34.0 ;

#Alusta muuttujat
minun $n1 = 10 ;
minun $n2 = 25 ;
minun $tulokseni = 0 ;

#Katkaise nykyinen prosessi
minun $prosessitunnus = haarukka ( ) ;

#Tarkista prosessin tunnus
jos ( $prosessin_tunnus == 0 )
{
#Laske lukujen kertolasku
sanoa 'Lapsiprosessi: $$' ;
$tulos = $n1 * $n2 ;
sanoa 'Odota 2 sekuntia... \n ' ;
nukkua 2 ;
sanoa '$n1:n ja $n2:n kertolasku on $tulos.' ;
}
elsif ( $prosessin_tunnus > 0 )
{
#Laske lukujen summa
sanoa 'Vanhemman prosessi: $$' ;
$tulos = $n1 + $n2 ;
sanoa 'Odota 1 sekunti... \n ' ;
nukkua 1 ;
sanoa '$n1 ja $n2 summa on $tulos.' ;
}
muu
{
sanoa 'Prosessia ei voi kääntää.' ;
}

#Odota prosessitehtävän suorittamista
odota ( ) ;

Lähtö:

Seuraava tulos tulee näkyviin komentosarjan suorittamisen jälkeen. Tulosteen mukaan aliprosessi luodaan onnistuneesti, pääprosessin prosessitunnus tulostetaan ja komentosarja keskeytetään 1 sekunniksi tehtävän suorittamiseksi. Seuraavaksi tulostetaan aliprosessin prosessitunnus ja komentosarja keskeytetään 2 sekunniksi tehtävän suorittamiseksi. Sekä ylä- että alatason prosessien tulos tulostetaan myöhemmin:

  p2

Johtopäätös

Perl fork() -funktion käyttötarkoitus esitetään tässä opetusohjelmassa luomalla aliprosessi ja suorittamalla erilaisia ​​tehtäviä emo- ja aliprosessien lohkossa.