Книга: Разработка приложений в среде Linux. Второе издание

10.4.1. Создание дочерних процессов

10.4.1. Создание дочерних процессов

В Linux предусмотрены два системных вызова, которые создают новые процессы: fork() и clone(). Как упоминалось ранее, clone() используется для создания потоков, и этот вызов будет кратко описан далее. А сейчас мы сосредоточимся на fork() — наиболее популярном методе создания процессов.

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

Этот системный вызов имеет уникальное свойство возвращать управление не один раз, а дважды: один раз в родительском процессе и другой — в дочернем. Обратите внимание, что мы не говорим "первый — в родительском" — написание кода, который делает какие-то предположения относительно предопределенного порядка — очень плохая идея.

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

Разница возвращаемых значений — это единственное отличие, видимое процессам. Оба имеют одинаковые образы памяти, права доступа, открытые файлы и обработчики сигналов[19]. Рассмотрим простой пример программы, порождающей дочерний процесс.

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
 pid_t child;
 if (!(child = fork())) {
  printf("в дочернемn");
  exit (0);
 }
 printf("в родительском - дочерний: %dn", child);
 return 0;
}

Оглавление книги


Генерация: 0.902. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз