Функција Перл Форк

Funkcija Perl Fork



Форк() је уграђена функција Перла која се користи за креирање подређеног процеса било ког покренутог процеса и ради само на Линук оперативним системима. Он креира засебну копију извршног процеса и покреће оба процеса паралелно. Дакле, ако се променљива родитељског процеса ажурира, то неће имати никакав утицај на исту променљиву подређеног процеса или обрнуто. Употреба функције форк() у Перлу је приказана у овом водичу.

Синтакса:

Синтакса функције форк() дата је у наставку. Враћа нумеричку вредност или „ундеф“. Ако функција форк() функционише успешно, враћа се одређени ИД процеса или се враћа 0 за подређени процес. Враћа „ундеф“ ако је функција форк() неуспешна.







ид или ундеф форк ( ) ;

Пример 1: Једноставна употреба функције Форк().

Креирајте Перл датотеку са следећом скриптом која креира подређени процес из тренутног процеса помоћу функције форк(). ИД процеса се штампа након извршавања функције форк(). Променљиве родитељског и подређеног процеса се чувају на различитим меморијским локацијама. Дакле, ако се вредност променљиве промени у надређеном процесу, она неће направити никакву промену за исту променљиву подређеног процеса или обрнуто. У овој скрипти, променљива родитељског процеса се мења. Затим се штампају варијабле и родитељског и подређеног процеса.



#!/уср/бин/перл

користите строге ;
користити упозорења ;
користите 5.34.0 ;

#Објавите променљиву
мој $вар = 'Тест виљушка' ;
#Форк тренутни процес
мој $процесс_ид = виљушка ( ) ;

#Проверите ИД процеса
ако ( $процесс_ид < 0 )
{
рецимо „Није могуће да се процес раздвоји.“ ;
}
елсиф ( $процесс_ид == 0 )
{
рецимо „Процес детета:“ ;
#Одштампајте вредност променљиве подређеног процеса
рецимо „Вредност променљиве: $вар“ ;
}
друго
{
рецимо „Надређени процес: $процесс_ид“ ;
#Ажурирајте вредност променљиве
$вар = 'Тест Форк 2' ;
#Одштампајте вредност променљиве родитељског процеса
рецимо „Вредност променљиве: $вар“ ;
}

Излаз:



Следећи излаз се појављује након извршавања скрипте. Променљива родитељског процеса је модификована са вредношћу „Тест Форк 2“, али променљива подређеног процеса остаје непромењена. Дакле, вредност променљиве подређеног процеса је „Тест Форк“. То је била вредност после виљушке:





  п1

Пример 2: Коришћење функција Форк() и Ваит().

Направите Перл датотеку са следећом скриптом која показује употребу функције форк() са функцијом ваит(). Три променљиве су декларисане на почетку скрипте. Функција слееп() се користи унутар блока родитељског процеса 1 секунду и унутар подређеног процеса 2 секунде. Збир две променљиве се израчунава и чува на другој променљивој унутар блока родитељског процеса. Вредности две променљиве се множе и чувају на другој променљивој унутар процеса детета. Функција чекај() се користи на крају скрипте да сачека завршетак задатка једног процеса пре него што започне задатак другог процеса. Ако се функција форк() користи више пута у скрипти и многи процеси раде у исто време, може доћи до застоја. Проблем се може решити помоћу функције чекај().



#!/уср/бин/перл

користите строге ;
користити упозорења ;
користите 5.34.0 ;

#Иницијализујте променљиве
мој $н1 = 10 ;
мој $н2 = 25 ;
мој $резултат = 0 ;

#Форк тренутни процес
мој $процесс_ид = виљушка ( ) ;

#Проверите ИД процеса
ако ( $процесс_ид == 0 )
{
#Израчунај множење бројева
рецимо „Процес детета: $$“ ;
$ресулт = $н1 * $н2 ;
рецимо „Сачекај 2 секунде... ' ;
спавати 2 ;
рецимо 'Множење $н1 и $н2 је $резултат.' ;
}
елсиф ( $процесс_ид > 0 )
{
#Израчунај збир бројева
рецимо „Родитељски процес: $$“ ;
$ресулт = $н1 + $н2 ;
рецимо „Сачекај 1 секунду... ' ;
спавати 1 ;
рецимо 'Збир $н1 и $н2 је $резултат.' ;
}
друго
{
рецимо „Није могуће да се процес раздвоји.“ ;
}

#Сачекајте да завршите процесни задатак
чекати ( ) ;

Излаз:

Следећи излаз се појављује након извршавања скрипте. Према излазу, подређени процес је успешно креиран, ИД процеса надређеног процеса је одштампан, а скрипта је паузирана на 1 секунду да заврши задатак. Затим се штампа ИД процеса подређеног процеса и скрипта се паузира на 2 секунде да би се задатак завршио. Излаз и родитељског и подређеног процеса се штампа касније:

  п2

Закључак

Сврха коришћења функције Перл форк() је приказана у овом водичу креирањем подређеног процеса и извођењем различитих типова задатака унутар блока надређеног и подређеног процеса.