Тема: Управление процессами. Создание и уничтожение процессов. Тины процессов.
Цель работы: овладеть навыками использования системных вызовов для порождения, дублирования завершения процессов. Теоретические сведения. Порождение процессов. Новый процесс порождается системным вызовом 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 Все права принадлежат авторам размещенных материалов.
|