Функция вилки Perl

Funkcia Vilki Perl



fork() — это встроенная функция Perl, которая используется для создания дочернего процесса любого запущенного процесса и работает только в операционных системах Linux. Он создает отдельную копию исполняемого процесса и запускает оба процесса параллельно. Таким образом, если переменная родительского процесса будет обновлена, это не окажет никакого влияния на ту же переменную дочернего процесса и наоборот. В этом руководстве показано использование функции fork() в Perl.

Синтаксис:

Синтаксис функции fork() приведен ниже. Он возвращает числовое значение или «undef». Если функция fork() работает успешно, возвращается конкретный идентификатор процесса или для дочернего процесса возвращается 0. Он возвращает «undef», если функция fork() не удалась.







идентификатор или неопределенная вилка ( ) ;

Пример 1. Простое использование функции Fork()

Создайте файл Perl с помощью следующего сценария, который создает дочерний процесс текущего процесса с помощью функции fork(). Идентификатор процесса выводится после выполнения функции fork(). Переменные родительского и дочернего процессов хранятся в разных местах памяти. Таким образом, если значение переменной изменяется в родительском процессе, оно не будет вносить никаких изменений в ту же переменную дочернего процесса и наоборот. В этом скрипте изменяется переменная родительского процесса. Затем выводятся переменные родительского и дочернего процессов.



#!/usr/bin/perl

используйте строгий ;
использовать предупреждения ;
используйте 5.34.0 ;

#Объявляем переменную
мой $вар '=' «Тестовая вилка» ;
#Разветвить текущий процесс
мой $process_id '=' вилка ( ) ;

#Проверяем идентификатор процесса
если ( $process_id < 0 )
{
сказать «Невозможно разветвить процесс». ;
}
Элсиф ( $process_id == 0 )
{
сказать «Дочерний процесс:» ;
#Распечатываем значение переменной дочернего процесса
сказать «Значение переменной: $var» ;
}
еще
{
сказать «Родительский процесс: $process_id» ;
#Обновляем значение переменной
$вар '=' «Тестовая вилка 2» ;
#Распечатываем значение переменной родительского процесса
сказать «Значение переменной: $var» ;
}

Выход:



Следующий вывод появляется после выполнения сценария. Переменная родительского процесса модифицируется значением «Test Fork 2», но переменная дочернего процесса остается неизменной. Итак, значение переменной дочернего процесса — «Test Fork». Вот значение после форка:





  п1

Пример 2. Использование функций Fork() и Wait()

Создайте файл Perl с помощью следующего сценария, который показывает использование функции fork() с функцией wait(). В начале скрипта объявляются три переменные. Функция Sleep() используется внутри блока родительского процесса в течение 1 секунды и внутри дочернего процесса в течение 2 секунд. Сумма двух переменных вычисляется и сохраняется в другой переменной внутри блока родительского процесса. Значения двух переменных умножаются и сохраняются в другой переменной внутри дочернего процесса. Функция wait() используется в конце сценария для ожидания завершения задачи одного процесса перед запуском задачи другого процесса. Если функция fork() используется в скрипте несколько раз и одновременно выполняется много процессов, может возникнуть ситуация взаимоблокировки. Проблему можно решить с помощью функции wait().



#!/usr/bin/perl

используйте строгий ;
использовать предупреждения ;
используйте 5.34.0 ;

#Инициализируем переменные
мой $n1 '=' 10 ;
мой $n2 '=' 25 ;
мой $результат '=' 0 ;

#Разветвить текущий процесс
мой $process_id '=' вилка ( ) ;

#Проверяем идентификатор процесса
если ( $process_id == 0 )
{
#Вычисляем умножение чисел
сказать «Дочерний процесс: $$» ;
$результат '=' $n1 * $n2 ;
сказать «Подождите 2 секунды… \п ' ;
спать 2 ;
сказать «Умножение $n1 и $n2 — это $result». ;
}
Элсиф ( $process_id > 0 )
{
#Вычисляем сумму чисел
сказать «Родительский процесс: $$» ;
$результат '=' $n1 + $n2 ;
сказать «Подождите 1 секунду… \п ' ;
спать 1 ;
сказать «Сумма $n1 и $n2 равна $result». ;
}
еще
{
сказать «Невозможно разветвить процесс». ;
}

#Подождите завершения задачи процесса
ждать ( ) ;

Выход:

Следующий вывод появляется после выполнения сценария. Согласно выходным данным, дочерний процесс создан успешно, выводится идентификатор родительского процесса, а выполнение сценария приостанавливается на 1 секунду для завершения задачи. Затем выводится идентификатор дочернего процесса, и сценарий приостанавливается на 2 секунды для завершения задачи. Вывод родительского и дочернего процессов выводится позже:

  п2

Заключение

Цель использования функции Perl fork() показана в этом руководстве путем создания дочернего процесса и выполнения различных типов задач внутри блока родительского и дочернего процессов.