Funkcia Perl Fork

Funkcia Perl Fork



Fork() je vstavaná funkcia Perlu, ktorá sa používa na vytvorenie podriadeného procesu akéhokoľvek spusteného procesu a funguje iba na operačných systémoch Linux. Vytvára samostatnú kópiu vykonávaného procesu a spúšťa oba procesy paralelne. Ak sa teda aktualizuje premenná nadradeného procesu, nebude to mať žiadny vplyv na rovnakú premennú podriadeného procesu alebo naopak. Použitie funkcie fork() v jazyku Perl je uvedené v tomto návode.

Syntax:

Syntax funkcie fork() je uvedená nižšie. Vráti číselnú hodnotu alebo „undef“. Ak funkcia fork() funguje úspešne, vráti sa ID konkrétneho procesu alebo sa vráti 0 pre podradený proces. Ak je funkcia fork() neúspešná, vráti „undef“.







id alebo undef fork ( ) ;

Príklad 1: Jednoduché použitie funkcie Fork().

Vytvorte súbor Perl pomocou nasledujúceho skriptu, ktorý vytvorí podriadený proces z aktuálneho procesu pomocou funkcie fork(). ID procesu sa vytlačí po vykonaní funkcie fork(). Premenné rodičovských a podriadených procesov sú uložené v rôznych pamäťových miestach. Ak sa teda hodnota premennej zmení v nadradenom procese, nevykoná žiadnu zmenu pre rovnakú premennú podriadeného procesu alebo naopak. V tomto skripte sa zmení premenná nadradeného procesu. Potom sa vytlačia premenné rodičovského aj podriadeného procesu.



#!/usr/bin/perl

používať prísne ;
použitie upozornenia ;
použite 5.34.0 ;

#Deklarujte premennú
moja $var = 'Testovacia vidlica' ;
# Rozdeľte aktuálny proces
moje $process_id = vidlička ( ) ;

#Skontrolujte ID procesu
ak ( $process_id < 0 )
{
povedať 'Proces sa nedá rozvetviť.' ;
}
elsif ( $process_id == 0 )
{
povedať 'Podriadený proces:' ;
#Vytlačte hodnotu premennej podriadeného procesu
povedať 'Hodnota premennej: $var' ;
}
inak
{
povedať 'Rodičovský proces: $process_id' ;
#Aktualizujte hodnotu premennej
$var = 'Test vidlica 2' ;
#Vytlačte hodnotu premennej nadradeného procesu
povedať 'Hodnota premennej: $var' ;
}

Výkon:



Po vykonaní skriptu sa zobrazí nasledujúci výstup. Premenná nadradeného procesu sa upraví hodnotou „Test Fork 2“, ale premenná podriadeného procesu zostane nezmenená. Hodnota premennej podriadeného procesu je teda „Test Fork“. To bola hodnota po vidlici:





  p1

Príklad 2: Použitie funkcií Fork() a Wait().

Vytvorte súbor Perl pomocou nasledujúceho skriptu, ktorý ukazuje použitie funkcie fork() s funkciou wait(). Na začiatku skriptu sú deklarované tri premenné. Funkcia sleep() sa používa vo vnútri bloku nadradeného procesu na 1 sekundu a vo vnútri podriadeného procesu na 2 sekundy. Súčet dvoch premenných sa vypočíta a uloží do inej premennej vo vnútri bloku nadradeného procesu. Hodnoty týchto dvoch premenných sa vynásobia a uložia do inej premennej vo vnútri podriadeného procesu. Funkcia wait() sa používa na konci skriptu na čakanie na dokončenie úlohy jedného procesu pred spustením úlohy iného procesu. Ak je funkcia fork() použitá v skripte viackrát a súčasne beží veľa procesov, môže dôjsť k zablokovaniu. Problém je možné vyriešiť pomocou funkcie wait().



#!/usr/bin/perl

používať prísne ;
použitie upozornenia ;
použite 5.34.0 ;

#Inicializujte premenné
môj $ n1 = 10 ;
moje $ n2 = 25 ;
môj $výsledok = 0 ;

# Rozdeľte aktuálny proces
moje $process_id = vidlička ( ) ;

#Skontrolujte ID procesu
ak ( $process_id == 0 )
{
#Vypočítajte násobenie čísel
povedať 'Podradený proces: $$' ;
$výsledok = $n1 * $n2 ;
povedať 'Počkaj 2 sekundy... \n ' ;
spať 2 ;
povedať 'Násobenie $ n1 a $ n2 je $ výsledok.' ;
}
elsif ( $process_id > 0 )
{
#Vypočítajte súčet čísel
povedať 'Rodičovský proces: $$' ;
$výsledok = $ n1 + $ n2 ;
povedať 'Počkaj 1 sekundu... \n ' ;
spať 1 ;
povedať 'Súčet $n1 a $n2 je $výsledok.' ;
}
inak
{
povedať 'Proces sa nedá rozvetviť.' ;
}

#Počkajte na dokončenie úlohy procesu
počkaj ( ) ;

Výkon:

Po vykonaní skriptu sa zobrazí nasledujúci výstup. Podľa výstupu sa podriadený proces úspešne vytvorí, vytlačí sa ID procesu nadradeného procesu a skript sa na 1 sekundu pozastaví, aby sa úloha dokončila. Ďalej sa vytlačí ID procesu podriadeného procesu a skript sa na 2 sekundy pozastaví, aby sa úloha dokončila. Výstup rodičovského aj podriadeného procesu sa vytlačí neskôr:

  p2

Záver

Účel použitia funkcie Perl fork() je znázornený v tomto návode vytvorením podriadeného procesu a vykonaním rôznych typov úloh v bloku rodičovského a podriadeného procesu.