Здавалка
Главная | Обратная связь

Тема: Управление процессами. Создание и уничтожение процессов. Тины процессов.



Цель работы: овладеть навыками использования системных вызовов для порождения, дублирования завершения процессов.

Теоретические сведения.

Порождение процессов.

Новый процесс порождается системным вызовом fork (), который создает дочерний процесс - копию родительского. В дочернем процессе выполняется та же программа, что и в родительском, и когда дочерний процесс начинает выполняться, он выполняется с точки возврата из системного вызова fork () . Системный вызов fork () возвращает родительскому процессу PID дочернего процесса, а дочернему процессу - 0. По коду возврата вызова fork () дочерний процесс может "опознать" себя как дочерний. Свой PID процесс родитель может получить при помощи системного вызова getpid(), a PID родительского процесса - при помощи системного вызова getppid(). Если требуется, чтобы в дочернем процессе выполнялась программа, отличная от программы родительского процесса, процесс может сменить выполняемую в нем программу при помощи одного из системных вызовов семейства exec (). Все вызовы этого семейства загружают для выполнения в процессе программу из заданного в вызове файла и отличаются друг от друга способом передачи параметров этой программе. Таким образом, наиболее распространенный контекст применения системного вызова forк () выглядит примерно так:

/* порождение дочернего процесса и запоминание его PID */

if (!(ch_pid-fork())

/* загрузка другой программы в дочернем процессе */ exec(программа);

else

продолжение родительского процесса

Fork ()

порождение нового процесса

Синтаксис

#include <unistd.h>

pid_ t. fork (void) ;

Описание

fork создает новый процесс, почти точную копию родительского процесса.

Новый процесс отличается от родительского только значениями идентификатора текущего процесса (PID) и идентификатором родительского процесса (PPID), а также тем, что счетчики использования ресурсов установлены в 0.

Основные характеристики родительского процесса, наследуемые дочерним процессом следующие:

· Окружение.

· Способы обработки сигналов, адреса функций обработки сигналов.

· Приоритет.

· Все присоединенные разделяемые сегменты памяти.

· Идентификатор группы процессов.

· Идентификатор группы терминала.

· Текущий рабочий каталог.

· Корневой каталог.

Блокировки файлов и сигналы, ожидающие обработки, не наследуются.

Порожденный процесс получает свои собственные копии родительских дескрипторов файлов. Каждый дескриптор файла порожденного процесса разделяет с соответствующим родительским дескриптором файла общий указатель текущей позиции в файле.

Возвращаемое значение

При успешном завершении родителю возвращается PID дочернего процесса, а дочернему процессу возвращается 0. При неудаче родительскому процессу возвращается -1, дочерний процесса не создается, а переменной errno присваивается код ошибки.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.