Funkce Perl Fork

Funkce Perl Fork



Fork() je vestavěná funkce Perlu, která se používá k vytvoření podřízeného procesu libovolného běžícího procesu a funguje pouze na operačních systémech Linux. Vytváří samostatnou kopii spouštěcího procesu a spouští oba procesy paralelně. Pokud je tedy proměnná nadřazeného procesu aktualizována, nebude to mít žádný vliv na stejnou proměnnou podřízeného procesu nebo naopak. Použití funkce fork() v Perlu je ukázáno v tomto tutoriálu.

Syntax:

Syntaxe funkce fork() je uvedena níže. Vrací číselnou hodnotu nebo „undef“. Pokud funkce fork() funguje úspěšně, je vráceno ID konkrétního procesu nebo 0 pro podřízený proces. Pokud je funkce fork() neúspěšná, vrátí „undef“.







id nebo undef fork ( ) ;

Příklad 1: Jednoduché použití funkce Fork().

Vytvořte soubor Perl pomocí následujícího skriptu, který vytvoří podřízený proces z aktuálního procesu pomocí funkce fork(). ID procesu se vytiskne po provedení funkce fork(). Proměnné nadřazených a podřízených procesů jsou uloženy v různých paměťových místech. Pokud se tedy změní hodnota proměnné v nadřazeném procesu, neprovede se žádná změna pro stejnou proměnnou podřízeného procesu nebo naopak. V tomto skriptu se změní proměnná nadřazeného procesu. Potom se vytisknou proměnné nadřazeného i podřízeného procesu.



#!/usr/bin/perl

používat přísné ;
použití varování ;
použijte 5.34.0 ;

#Deklarujte proměnnou
moje $var = 'Testovací vidlička' ;
# Rozvětvete aktuální proces
moje $process_id = Vidlička ( ) ;

# Zkontrolujte ID procesu
-li ( $process_id < 0 )
{
říci 'Nelze rozdělit proces.' ;
}
elsif ( $process_id == 0 )
{
říci 'Dětský proces:' ;
#Vytiskněte hodnotu proměnné podřízeného procesu
říci 'Hodnota proměnné: $var' ;
}
jiný
{
říci 'Rodičovský proces: $process_id' ;
#Aktualizujte hodnotu proměnné
$var = 'Testovací vidlice 2' ;
#Vytiskněte hodnotu proměnné nadřazeného procesu
říci 'Hodnota proměnné: $var' ;
}

Výstup:



Po provedení skriptu se zobrazí následující výstup. Proměnná nadřazeného procesu je upravena hodnotou „Test Fork 2“, ale proměnná podřízeného procesu zůstává nezměněna. Hodnota proměnné podřízeného procesu je tedy „Test Fork“. To byla hodnota po vidlici:





  p1

Příklad 2: Použití funkcí Fork() a Wait().

Vytvořte soubor Perl pomocí následujícího skriptu, který ukazuje použití funkce fork() s funkcí wait(). Na začátku skriptu jsou deklarovány tři proměnné. Funkce sleep() se používá uvnitř bloku nadřazeného procesu na 1 sekundu a uvnitř podřízeného procesu na 2 sekundy. Součet dvou proměnných se vypočítá a uloží do jiné proměnné uvnitř bloku nadřazeného procesu. Hodnoty dvou proměnných se vynásobí a uloží do jiné proměnné uvnitř podřízeného procesu. Funkce wait() se používá na konci skriptu k čekání na dokončení úlohy jednoho procesu před spuštěním úlohy jiného procesu. Pokud je funkce fork() použita ve skriptu vícekrát a současně běží mnoho procesů, může dojít k uváznutí. Problém lze vyřešit pomocí funkce wait().



#!/usr/bin/perl

používat přísné ;
použití varování ;
použijte 5.34.0 ;

#Inicializovat proměnné
můj $ n1 = 10 ;
moje $ n2 = 25 ;
můj $výsledek = 0 ;

# Rozvětvete aktuální proces
moje $process_id = Vidlička ( ) ;

# Zkontrolujte ID procesu
-li ( $process_id == 0 )
{
#Vypočítejte násobení čísel
říci 'Podřízený proces: $$' ;
$výsledek = $n1 * $n2 ;
říci 'Počkejte 2 sekundy... \n ' ;
spát 2 ;
říci 'Násobení $n1 a $n2 je $výsledek.' ;
}
elsif ( $process_id > 0 )
{
#Vypočítejte součet čísel
říci 'Rodičovský proces: $$' ;
$výsledek = $n1 + $n2 ;
říci 'Počkejte 1 sekundu... \n ' ;
spát 1 ;
říci 'Součet $n1 a $n2 je $výsledek.' ;
}
jiný
{
říci 'Nelze rozdělit proces.' ;
}

#Počkejte na dokončení procesní úlohy
Počkejte ( ) ;

Výstup:

Po provedení skriptu se zobrazí následující výstup. Podle výstupu se podřízený proces úspěšně vytvoří, vytiskne se ID procesu nadřazeného procesu a skript se na 1 sekundu pozastaví, aby se úkol dokončil. Dále se vytiskne ID procesu podřízeného procesu a skript se na 2 sekundy pozastaví, aby se úkol dokončil. Výstup nadřazených i podřízených procesů se vytiskne později:

  p2

Závěr

Účel použití funkce Perl fork() je ukázán v tomto tutoriálu vytvořením podřízeného procesu a prováděním různých typů úloh uvnitř bloku nadřazeného a podřízeného procesu.