Perli kahvli funktsioon

Perli Kahvli Funktsioon



Fork () on Perli sisseehitatud funktsioon, mida kasutatakse mis tahes töötava protsessi alamprotsessi loomiseks ja see töötab ainult Linuxi operatsioonisüsteemides. See loob käivitusprotsessist eraldi koopia ja käitab mõlemat protsessi paralleelselt. Seega, kui lähteprotsessi muutujat värskendatakse, ei avalda see alamprotsessi samale muutujale mingit mõju ega vastupidi. Selles õpetuses on näidatud funktsiooni fork() kasutamine Perlis.

Süntaks:

Funktsiooni fork() süntaks on toodud järgnevalt. See tagastab numbrilise väärtuse või 'undef'. Kui funktsioon fork() töötab edukalt, tagastatakse konkreetne protsessi ID või tagastatakse alamprotsessi jaoks 0. Tagastab 'undef', kui funktsioon fork() ei õnnestu.







id või undef kahvel ( ) ;

Näide 1: Funktsiooni Fork() lihtne kasutamine

Looge Perli fail järgmise skriptiga, mis loob funktsiooni fork() abil praegusest protsessist alamprotsessi. Protsessi ID prinditakse pärast funktsiooni fork() täitmist. Vanem- ja alamprotsesside muutujad salvestatakse erinevatesse mälukohtadesse. Seega, kui muutuja väärtust vanemprotsessis muudetakse, ei muuda see alamprotsessi sama muutuja puhul ega vastupidi. Selles skriptis muudetakse põhiprotsessi muutujat. Seejärel prinditakse nii vanema kui ka alamprotsessi muutujad.



#!/usr/bin/perl

kasutage ranget ;
kasutada hoiatused ;
kasuta 5.34.0 ;

#Deklareeri muutuja
minu $var = 'Testi kahvel' ;
#Kahveldage praegune protsess
minu $protsessi_id = kahvel ( ) ;

#Kontrollige protsessi ID-d
kui ( $protsessi_id < 0 )
{
öelda 'Protsessi ei saa katkestada.' ;
}
elsif ( $protsessi_id == 0 )
{
öelda 'Lapsprotsess:' ;
#Trüki alamprotsessi muutuja väärtus
öelda 'Muutuja väärtus: $var' ;
}
muidu
{
öelda 'Vanemprotsess: $ protsessi_id' ;
#Uuendage muutuja väärtust
$var = 'Testi kahvel 2' ;
#Prindige vanemprotsessi muutuja väärtus
öelda 'Muutuja väärtus: $var' ;
}

Väljund:



Pärast skripti täitmist ilmub järgmine väljund. Vanemprotsessi muutujat muudetakse väärtusega 'Test Fork 2', kuid alamprotsessi muutuja jääb muutumatuks. Seega on alamprotsessi muutuja väärtus 'Test Fork'. See oli väärtus pärast kahvlit:





  p1

Näide 2: Funktsioonide Fork() ja Wait() kasutamine

Looge Perli fail järgmise skriptiga, mis näitab funktsiooni fork () kasutamist koos funktsiooniga wait (). Skripti alguses deklareeritakse kolm muutujat. Funktsiooni sleep() kasutatakse põhiprotsessi ploki sees 1 sekundi ja alamprotsessi sees 2 sekundi jooksul. Kahe muutuja summa arvutatakse ja salvestatakse teise muutuja juurde, mis asub põhiprotsessi ploki sees. Kahe muutuja väärtused korrutatakse ja salvestatakse teise muutuja juurde alamprotsessi sees. Funktsiooni wait() kasutatakse skripti lõpus, et oodata ühe protsessi ülesande täitmist enne teise protsessi ülesande käivitamist. Kui funktsiooni fork() kasutatakse skriptis mitu korda ja samaaegselt töötab palju protsesse, võib tekkida ummikseisu. Probleemi saab lahendada ootamise () funktsiooni abil.



#!/usr/bin/perl

kasutage ranget ;
kasutada hoiatused ;
kasuta 5.34.0 ;

#Initsialiseerige muutujad
minu $n1 = 10 ;
minu $n2 = 25 ;
minu $tulemus = 0 ;

#Kahveldage praegune protsess
minu $protsessi_id = kahvel ( ) ;

#Kontrollige protsessi ID-d
kui ( $protsessi_id == 0 )
{
#Arvutage arvude korrutis
öelda 'Lapsprotsess: $$' ;
$tulemus = $n1 * $n2 ;
öelda 'Oota 2 sekundit... \n ' ;
magama 2 ;
öelda '$n1 ja $n2 korrutis on $tulemus.' ;
}
elsif ( $protsessi_id > 0 )
{
#Arvutage arvude summa
öelda 'Vanemprotsess: $$' ;
$tulemus = $n1 + $n2 ;
öelda 'Oota 1 sekund... \n ' ;
magama 1 ;
öelda '$n1 ja $n2 summa on $tulemus.' ;
}
muidu
{
öelda 'Protsessi ei saa katkestada.' ;
}

#Oodake protsessiülesande lõpuleviimist
oota ( ) ;

Väljund:

Pärast skripti täitmist ilmub järgmine väljund. Vastavalt väljundile luuakse alamprotsess edukalt, prinditakse vanemprotsessi protsessi ID ja skript peatatakse ülesande täitmiseks 1 sekundiks. Järgmisena prinditakse alamprotsessi protsessi ID ja skript peatatakse ülesande täitmiseks 2 sekundiks. Nii vanem- kui ka alamprotsesside väljund prinditakse hiljem:

  p2

Järeldus

Funktsiooni Perl fork() kasutamise eesmärki näidatakse selles õpetuses, luues alamprotsessi ja sooritades erinevat tüüpi ülesandeid vanem- ja alamprotsesside ploki sees.