Функция fork () используется для создания нового процесса путем дублирования существующего процесса, из которого он вызывается. Существующий процесс, из которого вызывается эта функция, становится родительским процессом, а вновь созданный процесс становится дочерним процессом. Как уже говорилось, потомок является дубликатом родителя, но есть некоторые исключения из него.
Ребенок имеет уникальный PID, как и любой другой процесс, выполняющийся в
операционная система.
У дочернего процесса есть идентификатор родительского процесса, который совпадает с PID
процесс, который его создал.
Счетчики использования ресурсов и времени ЦП сбрасываются на ноль у дочерних элементов
процесс.
Набор ожидающих сигналов у дочернего элемента пуст.
Ребенок не наследует таймеры от своего родителя
Пример:
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <sys/wait.h>
#include <stdlib.h>
int var_glb; /* A global variable*/
int main(void)
{
pid_t childPID;
int var_lcl = 0;
childPID = fork();
if(childPID >= 0) // fork was successful
{
if(childPID == 0) // child process
{
var_lcl++;
var_glb++;
printf("\n Child Process :: var_lcl = [%d], var_glb[%d]\n", var_lcl, var_glb);
}
else //Parent process
{
var_lcl = 10;
var_glb = 20;
printf("\n Parent process :: var_lcl = [%d], var_glb[%d]\n", var_lcl, var_glb);
}
}
else // fork failed
{
printf("\n Fork failed, quitting!!!!!!\n");
return 1;
}
return 0;
}
Теперь, когда приведенный выше код скомпилирован и запущен:
$ ./fork
Parent process :: var_lcl = [10], var_glb[20]
Child Process :: var_lcl = [1], var_glb[1]