La funció Perl Fork

La Funcio Perl Fork



El fork() és una funció integrada de Perl que s'utilitza per crear un procés fill de qualsevol procés en execució i només funciona als sistemes operatius Linux. Crea una còpia independent del procés d'execució i executa els dos processos en paral·lel. Per tant, si s'actualitza la variable del procés pare, no tindrà cap efecte sobre la mateixa variable del procés fill o viceversa. Els usos de la funció fork() en Perl es mostren en aquest tutorial.

Sintaxi:

La sintaxi de la funció fork() es mostra a continuació. Retorna un valor numèric o 'undef'. Si la funció fork() funciona correctament, es retorna un ID de procés particular o es retorna 0 per al procés fill. Retorna 'undef' si la funció fork() no té èxit.







id o forquilla undef ( ) ;

Exemple 1: Ús senzill de la funció Fork().

Creeu un fitxer Perl amb el següent script que crea un procés fill a partir del procés actual mitjançant la funció fork(). L'ID del procés s'imprimeix després d'executar la funció fork(). Les variables dels processos pare i fill s'emmagatzemen en diferents ubicacions de memòria. Per tant, si es canvia el valor de la variable en el procés pare, no farà cap canvi per a la mateixa variable del procés fill o viceversa. En aquest script, es canvia la variable del procés pare. A continuació, s'imprimeixen les variables dels processos pare i fill.



#!/usr/bin/perl

ús estricte ;
utilitzar avisos ;
utilitzar 5.34.0 ;

#Declarar una variable
el meu $var = 'Forquilla de prova' ;
#Fork el procés actual
el meu $process_id = forquilla ( ) ;

#Comprova l'identificador del procés
si ( $process_id < 0 )
{
dir 'No es pot bifurcar el procés'. ;
}
elsif ( $process_id == 0 )
{
dir 'Procés infantil:' ;
#Imprimeix el valor de la variable del procés fill
dir 'El valor de la variable: $var' ;
}
altra cosa
{
dir 'Procés principal: $process_id' ;
#Actualitza el valor de la variable
$var = 'Test Fork 2' ;
#Imprimeix el valor de la variable del procés pare
dir 'El valor de la variable: $var' ;
}

Sortida:



La sortida següent apareix després d'executar l'script. La variable del procés pare es modifica amb el valor 'Test Fork 2', però la variable del procés fill roman sense canvis. Per tant, el valor de la variable del procés fill és 'Test Fork'. Aquest era el valor després de la bifurcació:





  p1

Exemple 2: Ús de les funcions Fork() i Wait().

Creeu un fitxer Perl amb el següent script que mostri l'ús de la funció fork() amb la funció wait(). Es declaren tres variables al començament de l'script. La funció sleep() s'utilitza dins del bloc del procés principal durant 1 segon i dins del procés fill durant 2 segons. La suma de les dues variables es calcula i s'emmagatzema en una altra variable dins del bloc del procés pare. Els valors de les dues variables es multipliquen i s'emmagatzemen en una altra variable dins del procés fill. La funció wait() s'utilitza al final de l'script per esperar a completar la tasca d'un procés abans d'iniciar la tasca d'un altre procés. Si la funció fork() s'utilitza diverses vegades a l'script i molts processos s'executen al mateix temps, pot aparèixer una situació de bloqueig. El problema es pot resoldre mitjançant la funció wait().



#!/usr/bin/perl

ús estricte ;
utilitzar avisos ;
utilitzar 5.34.0 ;

#Inicialitza les variables
el meu $n1 = 10 ;
el meu $n2 = 25 ;
el meu $resultat = 0 ;

#Fork el procés actual
el meu $process_id = forquilla ( ) ;

#Comprova l'identificador del procés
si ( $process_id == 0 )
{
#Calculeu la multiplicació dels nombres
dir 'Procés secundari: $$' ;
$resultat = $n1 * $n2 ;
dir 'Espereu 2 segons... \n ' ;
dormir 2 ;
dir 'La multiplicació de $n1 i $n2 és $resultat.' ;
}
elsif ( $process_id > 0 )
{
#Calculeu la suma dels nombres
dir 'Procés principal: $$' ;
$resultat = $n1 + $n2 ;
dir 'Espereu 1 segon... \n ' ;
dormir 1 ;
dir 'La suma de $n1 i $n2 és $resultat.' ;
}
altra cosa
{
dir 'No es pot bifurcar el procés'. ;
}

#Espereu a completar la tasca del procés
espera ( ) ;

Sortida:

La sortida següent apareix després d'executar l'script. Segons la sortida, el procés secundari es crea correctament, s'imprimeix l'identificador del procés principal i l'script s'atura durant 1 segon per completar la tasca. A continuació, s'imprimeix l'ID de procés del procés secundari i l'script s'atura durant 2 segons per completar la tasca. La sortida dels processos pare i fill s'imprimeix més tard:

  p2

Conclusió

El propòsit d'utilitzar la funció Perl fork() es mostra en aquest tutorial creant un procés fill i realitzant diferents tipus de tasques dins del bloc dels processos pare i fill.