Ang Perl Fork Function

Ang Perl Fork Function



Ang fork() ay isang built-in na function ng Perl na ginagamit upang lumikha ng isang bata na proseso ng anumang tumatakbong proseso at ito ay gumagana lamang sa mga operating system ng Linux. Lumilikha ito ng isang hiwalay na kopya ng proseso ng pagpapatupad at nagpapatakbo ng parehong mga proseso nang magkatulad. Kaya, kung ang variable ng proseso ng magulang ay na-update, hindi ito magkakaroon ng anumang epekto sa parehong variable ng proseso ng bata o vice versa. Ang paggamit ng fork() function sa Perl ay ipinapakita sa tutorial na ito.

Syntax:

Ang syntax ng fork() function ay ibinibigay sa sumusunod. Nagbabalik ito ng numeric na halaga o 'undef'. Kung matagumpay na gumana ang fork() function, ibabalik ang isang partikular na ID ng proseso o ibabalik ang 0 para sa proseso ng bata. Ibinabalik nito ang 'undef' kung ang fork() function ay hindi matagumpay.







id o undef tinidor ( ) ;

Halimbawa 1: Simpleng Paggamit ng Fork() Function

Gumawa ng Perl file na may sumusunod na script na lumilikha ng proseso ng bata mula sa kasalukuyang proseso gamit ang fork() function. Ang process ID ay naka-print pagkatapos isagawa ang fork() function. Ang mga variable ng proseso ng magulang at anak ay iniimbak sa iba't ibang lokasyon ng memorya. Kaya, kung binago ang halaga ng variable sa proseso ng magulang, hindi ito gagawa ng anumang pagbabago para sa parehong variable ng proseso ng bata o kabaliktaran. Sa script na ito, binago ang variable ng proseso ng magulang. Pagkatapos, ang mga variable ng parehong proseso ng magulang at anak ay naka-print.



#!/usr/bin/perl

gumamit ng mahigpit ;
gamitin mga babala ;
gamitin ang 5.34.0 ;

#Magdeklara ng variable
ang aking $var = 'Test Fork' ;
#I-fork ang kasalukuyang proseso
ang aking $process_id = tinidor ( ) ;

#Suriin ang process id
kung ( $process_id < 0 )
{
sabihin 'Hindi ma-fork ang proseso.' ;
}
elsif ( $process_id == 0 )
{
sabihin 'Proseso ng Bata:' ;
#I-print ang halaga ng variable ng proseso ng bata
sabihin 'Ang halaga ng variable: $var' ;
}
iba pa
{
sabihin 'Proseso ng Magulang: $process_id' ;
#I-update ang halaga ng variable
$var = 'Test Fork 2' ;
#Print ang value ng variable ng parent process
sabihin 'Ang halaga ng variable: $var' ;
}

Output:



Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script. Ang variable ng proseso ng magulang ay binago gamit ang 'Test Fork 2' na halaga ngunit ang variable ng proseso ng bata ay nananatiling hindi nagbabago. Kaya, ang halaga ng variable ng proseso ng bata ay 'Test Fork'. Iyon ang halaga pagkatapos ng tinidor:





  p1

Halimbawa 2: Paggamit ng Fork() at Wait() Function

Gumawa ng Perl file na may sumusunod na script na nagpapakita ng paggamit ng fork() function na may wait() function. Tatlong variable ang idineklara sa simula ng script. Ginagamit ang function na sleep() sa loob ng block ng proseso ng magulang sa loob ng 1 segundo at sa loob ng proseso ng bata sa loob ng 2 segundo. Ang kabuuan ng dalawang variable ay kinakalkula at iniimbak sa isa pang variable sa loob ng bloke ng proseso ng magulang. Ang mga halaga ng dalawang variable ay pinarami at iniimbak sa isa pang variable sa loob ng proseso ng bata. Ang wait() function ay ginagamit sa dulo ng script upang maghintay para sa pagkumpleto ng gawain ng isang proseso bago simulan ang gawain ng isa pang proseso. Kung ang fork() function ay ginamit nang maraming beses sa script at maraming proseso ang tumatakbo nang sabay, maaaring magkaroon ng deadlock na sitwasyon. Ang problema ay maaaring malutas gamit ang wait() function.



#!/usr/bin/perl

gumamit ng mahigpit ;
gamitin mga babala ;
gamitin ang 5.34.0 ;

#Initialize ang mga variable
ang aking $n1 = 10 ;
ang aking $n2 = 25 ;
ang aking $resulta = 0 ;

#I-fork ang kasalukuyang proseso
ang aking $process_id = tinidor ( ) ;

#Suriin ang process id
kung ( $process_id == 0 )
{
#Kalkulahin ang multiplikasyon ng mga numero
sabihin 'Proseso ng Bata: $$' ;
$resulta = $n1 * $n2 ;
sabihin 'Maghintay ng 2 segundo... \n ' ;
matulog 2 ;
sabihin 'Ang multiplikasyon ng $n1 at $n2 ay $result.' ;
}
elsif ( $process_id > 0 )
{
#Kalkulahin ang kabuuan ng mga numero
sabihin 'Proseso ng Magulang: $$' ;
$resulta = $n1 + $n2 ;
sabihin 'Maghintay ng isang segundo... \n ' ;
matulog 1 ;
sabihin 'Ang kabuuan ng $n1 at $n2 ay $result.' ;
}
iba pa
{
sabihin 'Hindi ma-fork ang proseso.' ;
}

#Maghintay upang makumpleto ang gawain sa proseso
maghintay ( ) ;

Output:

Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script. Ayon sa output, matagumpay na nalikha ang proseso ng bata, ang proseso ng ID ng proseso ng magulang ay naka-print, at ang script ay naka-pause ng 1 segundo upang makumpleto ang gawain. Susunod, ang process ID ng proseso ng bata ay naka-print at ang script ay naka-pause ng 2 segundo upang makumpleto ang gawain. Ang output ng parehong proseso ng magulang at anak ay naka-print sa ibang pagkakataon:

  p2

Konklusyon

Ang layunin ng paggamit ng Perl fork() function ay ipinapakita sa tutorial na ito sa pamamagitan ng paggawa ng proseso ng bata at pagsasagawa ng iba't ibang uri ng mga gawain sa loob ng block ng proseso ng magulang at ng bata.