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:
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:
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.