8. Управление процессами - клонирование (функция fork). Управление процессами - загрузка из исполняемого файла (функции ехес…).

Процесс в UNIX создается системным вызовом fork(2).

Процесс, сделавший вызов fork(2), называется родительским, а вновь созданный - дочерним. Новый процесс является точной копией породившего его процесса. Каждый процесс имеет одного родителя, но может иметь несколько потомков. Для запуска задачи, то есть загрузки новой программы, процесс должен сделать вызов exec(3). При этом новый процесс не порождается, а исполняемый код нового процесса полностью замещается кодом запускаемой программы. Тем не менее сохраняются значения переменных окружения, назначение стандартных потоков ввода/вывода и ошибок, а также приоритет процесса. В UNIX запуск на выполнение новой программы часто связан с порождением нового процесса. Таким образом, процесс сначала выполняет fork, порождая дочерний процесс, который затем выполняет exec, полностью замещая родительский процесс. Такая процедура запуска называется forkand-exec. Бывают ситуации, когда достаточно одного вызова fork без последующего exec. В этом случае исполняемый код родительского и дочернего процессов должен содержать логическое ветвление для родительского и дочернего процессов. (fork возвращает PID порожденного процесса в родительский и ноль - в дочерний.) Все процессы создаются через вызов fork. Прародителем всех процессов является init или распределитель процессов.