La funzione Fork Perl

La Funzione Fork Perl



fork() è una funzione incorporata di Perl che viene utilizzata per creare un processo figlio di qualsiasi processo in esecuzione e funziona solo sui sistemi operativi Linux. Crea una copia separata del processo di esecuzione ed esegue entrambi i processi in parallelo. Quindi, se la variabile del processo genitore viene aggiornata, non avrà alcun effetto sulla stessa variabile del processo figlio o viceversa. Gli usi della funzione fork() in Perl sono mostrati in questo tutorial.

Sintassi:

La sintassi della funzione fork() è riportata di seguito. Restituisce un valore numerico o “undef”. Se la funzione fork() funziona correttamente, viene restituito un particolare ID di processo oppure viene restituito 0 per il processo figlio. Restituisce 'undef' se la funzione fork() non ha successo.







id O forcella indefinita ( ) ;

Esempio 1: utilizzo semplice della funzione Fork()

Crea un file Perl con il seguente script che crea un processo figlio dal processo corrente utilizzando la funzione fork(). L'ID del processo viene stampato dopo aver eseguito la funzione fork(). Le variabili dei processi genitore e figlio sono archiviate in posizioni di memoria diverse. Quindi, se il valore della variabile viene modificato nel processo genitore, non verrà apportata alcuna modifica per la stessa variabile del processo figlio o viceversa. In questo script, la variabile del processo genitore viene modificata. Quindi, vengono stampate le variabili sia del processo genitore che di quello figlio.



#!/usr/bin/perl

usare rigoroso ;
utilizzo avvertimenti ;
utilizzare 5.34.0 ;

#Dichiarare una variabile
il mio $var = 'Prova Forcella' ;
#Biforca il processo corrente
il mio $process_id = forchetta ( ) ;

#Controlla l'ID del processo
Se ( $id_processo < 0 )
{
Dire 'Impossibile biforcare il processo.' ;
}
else ( $id_processo == 0 )
{
Dire 'Processo figlio:' ;
#Stampa il valore della variabile del processo figlio
Dire 'Il valore della variabile: $var' ;
}
altro
{
Dire 'Processo principale: $process_id' ;
#Aggiorna il valore della variabile
$var = 'Prova Forcella 2' ;
#Stampa il valore della variabile del processo genitore
Dire 'Il valore della variabile: $var' ;
}

Produzione:



Il seguente output viene visualizzato dopo l'esecuzione dello script. La variabile del processo genitore viene modificata con il valore “Test Fork 2” ma la variabile del processo figlio rimane invariata. Quindi, il valore della variabile del processo figlio è “Test Fork”. Questo era il valore dopo il fork:





  p1

Esempio 2: utilizzo delle funzioni Fork() e Wait()

Crea un file Perl con il seguente script che mostra l'uso della funzione fork() con la funzione wait(). All'inizio dello script vengono dichiarate tre variabili. La funzione sleep() viene utilizzata all'interno del blocco del processo genitore per 1 secondo e all'interno del processo figlio per 2 secondi. La somma delle due variabili viene calcolata e memorizzata su un'altra variabile all'interno del blocco del processo genitore. I valori delle due variabili vengono moltiplicati e memorizzati su un'altra variabile all'interno del processo figlio. La funzione wait() viene utilizzata alla fine dello script per attendere il completamento dell'attività di un processo prima di avviare l'attività di un altro processo. Se la funzione fork() viene utilizzata più volte nello script e molti processi vengono eseguiti contemporaneamente, potrebbe verificarsi una situazione di stallo. Il problema può essere risolto utilizzando la funzione wait().



#!/usr/bin/perl

usare rigoroso ;
utilizzo avvertimenti ;
utilizzare 5.34.0 ;

#Inizializza le variabili
il mio $n1 = 10 ;
i miei $n2 = 25 ;
il mio $risultato = 0 ;

#Biforca il processo corrente
il mio $process_id = forchetta ( ) ;

#Controlla l'ID del processo
Se ( $id_processo == 0 )
{
#Calcola la moltiplicazione dei numeri
Dire 'Processo figlio: $$' ;
$risultato = $n1 * $n2 ;
Dire 'Aspetta 2 secondi... \N ' ;
sonno 2 ;
Dire 'La moltiplicazione di $n1 e $n2 è $risultato.' ;
}
else ( $id_processo > 0 )
{
#Calcola la somma dei numeri
Dire 'Processo principale: $$' ;
$risultato = $n1 + $n2 ;
Dire 'Aspetta 1 secondo... \N ' ;
sonno 1 ;
Dire 'La somma di $n1 e $n2 è $risultato.' ;
}
altro
{
Dire 'Impossibile biforcare il processo.' ;
}

#Attendere il completamento dell'attività del processo
Aspettare ( ) ;

Produzione:

Il seguente output viene visualizzato dopo l'esecuzione dello script. In base all'output, il processo figlio viene creato correttamente, l'ID processo del processo padre viene stampato e lo script viene messo in pausa per 1 secondo per completare l'attività. Successivamente, viene stampato l'ID del processo figlio e lo script viene messo in pausa per 2 secondi per completare l'attività. L'output di entrambi i processi genitore e figlio viene stampato successivamente:

  p2

Conclusione

Lo scopo dell'utilizzo della funzione Perl fork() è mostrato in questo tutorial creando un processo figlio ed eseguendo diversi tipi di attività all'interno del blocco dei processi genitore e figlio.