De Perl Fork-functie

De Perl Fork Functie



De fork() is een ingebouwde functie van Perl die wordt gebruikt om een ​​onderliggend proces van elk lopend proces te maken en werkt alleen op de Linux-besturingssystemen. Het creëert een aparte kopie van het uitvoerende proces en voert beide processen parallel uit. Dus als de variabele van het bovenliggende proces wordt bijgewerkt, heeft dit geen enkel effect op dezelfde variabele van het onderliggende proces, of omgekeerd. Het gebruik van de functie fork() in Perl wordt in deze tutorial getoond.

Syntaxis:

De syntaxis van de functie fork() wordt hieronder gegeven. Het retourneert een numerieke waarde of “undef”. Als de functie fork() succesvol werkt, wordt een bepaald proces-ID geretourneerd of wordt 0 geretourneerd voor het onderliggende proces. Het retourneert “undef” als de functie fork() niet succesvol is.







ID kaart of undef vork ( ) ;

Voorbeeld 1: eenvoudig gebruik van de functie Fork().

Maak een Perl-bestand met het volgende script dat een onderliggend proces maakt van het huidige proces met behulp van de functie fork(). De proces-ID wordt afgedrukt na het uitvoeren van de functie fork(). De variabelen van de ouder- en kindprocessen worden op verschillende geheugenlocaties opgeslagen. Dus als de waarde van de variabele in het bovenliggende proces wordt gewijzigd, zal deze geen enkele wijziging aanbrengen voor dezelfde variabele van het onderliggende proces, of omgekeerd. In dit script wordt de variabele van het bovenliggende proces gewijzigd. Vervolgens worden de variabelen van zowel bovenliggende als onderliggende processen afgedrukt.



#!/usr/bin/perl

gebruik strikt ;
gebruik waarschuwingen ;
gebruik 5.34.0 ;

#Declareer een variabele
mijn $var = 'Testvork' ;
#Vork het huidige proces af
mijn $process_id = vork ( ) ;

#Controleer de proces-ID
als ( $process_id < 0 )
{
inspraak 'Niet in staat om het proces te splitsen.' ;
}
elsif ( $process_id == 0 )
{
inspraak 'Kinderproces:' ;
#Print de waarde van de variabele van het onderliggende proces
inspraak 'De waarde van de variabele: $var' ;
}
anders
{
inspraak 'Ouderproces: $process_id' ;
#Update de waarde van de variabele
$var = 'Testvork 2' ;
#Print de waarde van de variabele van het bovenliggende proces
inspraak 'De waarde van de variabele: $var' ;
}

Uitgang:



De volgende uitvoer verschijnt na het uitvoeren van het script. De variabele van het ouderproces wordt gewijzigd met de waarde “Test Fork 2”, maar de variabele van het kindproces blijft ongewijzigd. De waarde van de variabele van het kindproces is dus “Test Fork”. Dat was de waarde na de vork:





  p1

Voorbeeld 2: De functies Fork() en Wait() gebruiken

Maak een Perl-bestand met het volgende script dat het gebruik van de functie fork() met de functie wait() laat zien. Aan het begin van het script worden drie variabelen gedeclareerd. De functie sleep() wordt gedurende 1 seconde binnen het blok van het bovenliggende proces en gedurende 2 seconden binnen het onderliggende proces gebruikt. De som van de twee variabelen wordt berekend en opgeslagen op een andere variabele binnen het blok van het bovenliggende proces. De waarden van de twee variabelen worden vermenigvuldigd en opgeslagen op een andere variabele binnen het onderliggende proces. De functie wait() wordt aan het einde van het script gebruikt om te wachten op het voltooien van de taak van het ene proces voordat de taak van een ander proces wordt gestart. Als de functie fork() meerdere keren in het script wordt gebruikt en er veel processen tegelijkertijd worden uitgevoerd, kan er een impasse ontstaan. Het probleem kan worden opgelost met de functie wait().



#!/usr/bin/perl

gebruik strikt ;
gebruik waarschuwingen ;
gebruik 5.34.0 ;

#Initialiseer de variabelen
mijn $n1 = 10 ;
mijn $n2 = 25 ;
mijn $resultaat = 0 ;

#Vork het huidige proces af
mijn $process_id = vork ( ) ;

#Controleer de proces-ID
als ( $process_id == 0 )
{
#Bereken de vermenigvuldiging van de getallen
inspraak 'Onderliggend proces: $$' ;
$resultaat = $n1 * $n2 ;
inspraak 'Wacht 2 seconden... \N ' ;
slaap 2 ;
inspraak 'De vermenigvuldiging van $n1 en $n2 is $resultaat.' ;
}
elsif ( $process_id > 0 )
{
#Bereken de som van de getallen
inspraak 'Ouderproces: $$' ;
$resultaat = $n1 + $n2 ;
inspraak 'Wacht 1 seconde... \N ' ;
slaap 1 ;
inspraak 'De som van $n1 en $n2 is $resultaat.' ;
}
anders
{
inspraak 'Niet in staat om het proces te splitsen.' ;
}

#Wacht om de procestaak te voltooien
wachten ( ) ;

Uitgang:

De volgende uitvoer verschijnt na het uitvoeren van het script. Volgens de uitvoer is het onderliggende proces met succes aangemaakt, wordt de proces-ID van het bovenliggende proces afgedrukt en wordt het script gedurende 1 seconde gepauzeerd om de taak te voltooien. Vervolgens wordt het proces-ID van het onderliggende proces afgedrukt en wordt het script 2 seconden gepauzeerd om de taak te voltooien. De uitvoer van zowel bovenliggende als onderliggende processen wordt later afgedrukt:

  p2

Conclusie

Het doel van het gebruik van de functie Perl fork() wordt in deze zelfstudie getoond door een onderliggend proces te maken en verschillende soorten taken uit te voeren binnen het blok van het bovenliggende en onderliggende proces.