Создание процессов с помощью Fork в C++

Опубликовано: 20 Февраля, 2023

fork() — это системный вызов, который создает дочерний процесс из родительского процесса. Всякий раз, когда мы вызываем fork() из родительской программы, создается дочерний процесс с точной копией адресного пространства. Важно помнить, что он разделяет копию адресного пространства, а не саму копию.

Синтаксис :

#include<unistd.h>
pid_t fork(void);

Значение :

  • И родительский, и дочерний процессы представляют собой два отдельных потока, которые выполняются в разных адресных пространствах.
  • Потоки похожи на процесс, за исключением того, что они совместно используют адресное пространство.
  • функция fork может выполняться одновременно в одной и той же программе или может запускать исполняемый файл из файловой системы
  • Это помогает различать родительские и дочерние процессы с помощью pid. Он возвращает 0 для дочернего процесса и положительное целое число для родительского процесса.

В следующем примере демонстрируется многопроцессорная среда. Вызов fork() не имеет аргументов/null и возвращается в обоих процессах. В родительском процессе идентификатор возврата (pid) совпадает с идентификатором дочернего процесса. если это не удается, в родительском элементе возвращается -1.

Пример:

Создание нескольких процессов с помощью форка

Когда родитель разветвляет дочерний, есть два процесса, родительский и дочерний. Но когда дочерний процесс создает другого дочернего процесса, это число увеличивается в степени 2. Например, при наличии двух вызовов forks() n=2, а общее количество процессов равно 2^2=4.

Пример:

Количество раз, когда наш выходной оператор выполняется, равно количеству раз, когда создается дочерний процесс. Здесь, в нашем примере, n = 3, поэтому общий процесс = 2 ^ 3 = 8. Таким образом, на выходе будет 8 строк. Здесь общее количество дочерних процессов = 2^n – 1 = 8-1 = 7 (поскольку один из них будет родительским процессом).