A função Perl Fork

A Funcao Perl Fork



O fork() é uma função integrada do Perl usada para criar um processo filho de qualquer processo em execução e funciona apenas em sistemas operacionais Linux. Ele cria uma cópia separada do processo em execução e executa os dois processos em paralelo. Portanto, se a variável do processo pai for atualizada, não terá nenhum efeito na mesma variável do processo filho ou vice-versa. Os usos da função fork() em Perl são mostrados neste tutorial.

Sintaxe:

A sintaxe da função fork() é fornecida a seguir. Ele retorna um valor numérico ou “undef”. Se a função fork() funcionar com sucesso, um ID de processo específico será retornado ou 0 será retornado para o processo filho. Ele retorna “undef” se a função fork() não for bem-sucedida.







eu ia ou garfo indefinido ( ) ;

Exemplo 1: Uso Simples da Função Fork()

Crie um arquivo Perl com o script a seguir que cria um processo filho a partir do processo atual usando a função fork(). O ID do processo é impresso após a execução da função fork(). As variáveis ​​dos processos pai e filho são armazenadas em locais de memória diferentes. Portanto, se o valor da variável for alterado no processo pai, não fará nenhuma alteração para a mesma variável do processo filho ou vice-versa. Neste script, a variável do processo pai é alterada. Em seguida, as variáveis ​​dos processos pai e filho são impressas.



#!/usr/bin/perl

usar estrito ;
usar avisos ;
usar 5.34.0 ;

#Declara uma variável
meu $var = 'garfo de teste' ;
#Fork o processo atual
meu $process_id = garfo ( ) ;

#Verifique o ID do processo
se ( $process_id < 0 )
{
dizer 'Incapaz de bifurcar o processo.' ;
}
Elif ( $process_id == 0 )
{
dizer 'Processo Filho:' ;
#Imprime o valor da variável do processo filho
dizer 'O valor da variável: $var' ;
}
outro
{
dizer 'Processo pai: $process_id' ;
#Atualiza o valor da variável
$var = 'Teste Garfo 2' ;
#Imprime o valor da variável do processo pai
dizer 'O valor da variável: $var' ;
}

Saída:



A seguinte saída aparece após a execução do script. A variável do processo pai é modificada com o valor “Test Fork 2”, mas a variável do processo filho permanece inalterada. Portanto, o valor da variável do processo filho é “Test Fork”. Esse foi o valor após o fork:





  p1

Exemplo 2: Usando as funções Fork() e Wait()

Crie um arquivo Perl com o seguinte script que mostra o uso da função fork() com a função wait(). Três variáveis ​​são declaradas no início do script. A função sleep() é usada dentro do bloco do processo pai por 1 segundo e dentro do processo filho por 2 segundos. A soma das duas variáveis ​​é calculada e armazenada em outra variável dentro do bloco do processo pai. Os valores das duas variáveis ​​são multiplicados e armazenados em outra variável dentro do processo filho. A função wait() é usada no final do script para aguardar a conclusão da tarefa de um processo antes de iniciar a tarefa de outro processo. Se a função fork() for usada várias vezes no script e muitos processos estiverem em execução ao mesmo tempo, poderá surgir uma situação de impasse. O problema pode ser resolvido usando a função wait().



#!/usr/bin/perl

usar estrito ;
usar avisos ;
usar 5.34.0 ;

#Inicialize as variáveis
meu $n1 = 10 ;
meu $n2 = 25 ;
meu $resultado = 0 ;

#Fork o processo atual
meu $process_id = garfo ( ) ;

#Verifique o ID do processo
se ( $process_id == 0 )
{
#Calcule a multiplicação dos números
dizer 'Processo filho: $$' ;
$resultado = $n1 * $n2 ;
dizer 'Espere 2 segundos... \n ' ;
dormir 2 ;
dizer 'A multiplicação de $n1 e $n2 é $resultado.' ;
}
Elif ( $process_id > 0 )
{
#Calcule a soma dos números
dizer 'Processo pai: $$' ;
$resultado = $n1 + $n2 ;
dizer 'Espere um segundo... \n ' ;
dormir 1 ;
dizer 'A soma de $n1 e $n2 é $resultado.' ;
}
outro
{
dizer 'Incapaz de bifurcar o processo.' ;
}

#Aguarde para concluir a tarefa do processo
espere ( ) ;

Saída:

A seguinte saída aparece após a execução do script. De acordo com a saída, o processo filho foi criado com sucesso, o ID do processo pai é impresso e o script é pausado por 1 segundo para concluir a tarefa. Em seguida, o ID do processo filho é impresso e o script é pausado por 2 segundos para concluir a tarefa. A saída dos processos pai e filho é impressa posteriormente:

  p2

Conclusão

O objetivo de usar a função Perl fork() é mostrado neste tutorial criando um processo filho e executando diferentes tipos de tarefas dentro do bloco dos processos pai e filho.