Форк создает новый процесс. Вновь созданный процесс является дочерним процессом. Он представляет собой копию последующего кода родительского процесса. Обычно он используется как многопроцессный сервер. Он также может запускать независимый код в дочернем процессе.
Используйте getpid, чтобы определить, является ли текущий процесс дочерним или родительским процессом.
Рассмотрим следующий пример:
Ниже приводится цитируемое содержание:
#include <sys/types.h> #include <unistd.h> #include <stdio.h> интервал основной() { пид_т пид; статический интервал n = 0; printf("вилка!n"); переключатель (pid = fork()) { случай-1: { /* ..pid.-1.fork.... */ /* ....... */ /*..........*/ perror("Вилка не удалась!"); перерыв; } случай 0: { /* пид.0.... */ printf("[ребенок]я ребенок!n"); printf("[child]getpid=[%d]n", getpid() ); printf("[child]pid=[%d]n", pid ); перерыв; } по умолчанию: { /* pid..0.... */ printf("[родитель]я родитель!n" ); printf("[parent]getpid=[%d]n",getpid() ); printf("[parent]pid=[%d]n",pid ); перерыв; } } printf("n=[%d]n", n++); вернуть 0; } |
Этот пример скомпилирован с помощью gcc под Linux, и результаты работы следующие:
Ниже приводится цитируемое содержание:
вилка! [ребёнок]я ребёнок! [ребенок]getpid=[7422] [ребенок]pid=[0] п=[0] [родитель]я родитель! [родитель]getpid=[7421] [родительский]pid=[7422] п=[0] |