Книга: Разработка приложений в среде Linux. Второе издание
10.4.4. Ускоренное создание процессов с помощью vfork()
10.4.4. Ускоренное создание процессов с помощью vfork()
Обычно процессы, в которых вызывается fork()
, немедленно вызывают exec()
для другой программы (это то, что оболочка делает всякий раз, когда вы вводите команду), что делает полную семантику fork()
более расточительной по вычислительным ресурсам, чем это необходимо.
Чтобы оптимизировать этот общий случай, существует vfork()
.
#include <unistd.h>
pid_t vfork(void);
Вместо создания совершенно новой среды выполнения для нового процесса vfork()
создает новый процесс, который разделяет память с исходным процессом. Ожидается, что новый процесс запустит другой процесс посредством exit()
или exec()
очень быстро, но его поведение непредсказуемо, если он модифицирует память, возвратит управление из функции vfork()
, содержащейся в нем, либо вызовет любую новую функцию. В дополнение к этому исходный процесс приостанавливается, до тех пор, пока новый либо не будет прерван, либо вызовет функцию exec()
[24]. Однако не все системы обеспечивают семантику разделения памяти и приостановки родительского процесса vfork()
, поэтому приложения не должны полагаться на такое поведение.
- 9.1.1. Создание процесса: fork()
- 10.4.6. Уничтожение других процессов
- 10.4. Примитивы процессов
- 10.4.1. Создание дочерних процессов
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Глава 7 Чего нужно опасаться при моделировании бизнес-процессов. Проектные риски моделирования бизнеспроцессов
- Создание файлов с блокировкой
- Организация пользователей в группы с помощью ролей
- Ускоренное обновление данных
- Создание свободно позиционируемых элементов
- Эффективное взаимодействие процессов архитектуры Classic Server