Создание процессов с помощью Fork в C++
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 (поскольку один из них будет родительским процессом).