Жизненный цикл процесса
Алгоритм работы процессов в ОС определяется следующими условиями:
- имеется запущенный процесс;
- каждый процесс может запускать подпроцессы;
- создание нового процесса создается клонированием исходного;
- прародителем всех процессов в системе является процесс
init, запускаемый ядром ОС при загрузке; - процессы взаимодействуют между собой посредством межпроцессного взаимодействия:
- каналы;
- сигналы;
- сокеты;
- разделяемая память;
- каждый процесс обладает свойствами (процесс обладает контекстом):
- PID – идентификатор процесса;
- PPID – идентификатор процесса, породившего данный процесс;
- UID и GID – идентификаторы прав процесса (соответствует UID и GID пользователя, от имени которого запущен процесс);
- приоритет процесса;
- состояние процесса (выполнение, сон и т.п.).
Типичный процесс в Linux может быть представлен схемой (Рисунок 11).

Рисунок 11 - Схема жизненного цикла процесса в ОС
Этапы состоят из следующих шагов:
- процесс
/bin/bashклонирует себя системным вызовомfork(); - при этом создается клон
/bin/bashс новым PID (идентификатор процесса) и PPID, равный PID родителя; - клон выполняет системный вызов
execс указанием на исполняемый файл и заменяет свой код кодом исполняемого файла родительский процесс при этом ждет завершения потомкаwait(); - если по каким-то причинам потомок завершил свою работу, а родительский процесс не смог получить об этом сигнал, то данный процесс (потомок) не освобождает занятые структуры ядра и состояние процесса становиться
zombie.
Первый процесс в Системе запускается при инициализации ядра. Данный процесс называется init и имеет PID=1 – это прародитель всех процессов в Системе.
Каждый запущенный процесс в любой момент времени может находиться в одном из следующих состояний (которое называют еще статусом процесса):
- Активен (R=Running)– находится в очереди на выполнение, то есть либо выполняется в данный момент, либо ожидает выделения ему очередного кванта времени центрального процессора.
- "Спит" (S=Sleeping)– находится в состоянии прерываемого ожидания, то есть ожидает какого-то события, сигнала или освобождения нужного ресурса.
- Непрерываемое ожидание (D=Direct) – ожидает определенного ("прямого") сигнала от аппаратной части и не реагирует на другие сигналы;
- Приостановлен (T) – находится в режиме трассировки (обычно такое состояние возникает при отладке программ);
- "Зомби" (Z=Zombie) – выполнение завершилось, но относящиеся к нему структуры ядра по каким-то причинам не освобождены. Одной из причин их появления в Системе может быть следующая ситуация: обычно освобождение структур ядра, относящихся к процессу, выполняет процесс-родитель после получения от потомка сигнала о завершении. Но бывают случаи, когда родительский процесс завершается раньше дочернего.
- Сироты – не имеют родителя, автоматически "усыновляются" процессом
init, который и принимает сигналы об их завершении. Если процесс-родитель илиinitпо каким-то причинам не может принять сигнал о завершении дочернего процесса, то процесс-потомок превращается в"зомби"и получает статус"Z". Процессы-"зомби" не занимают процессорного времени (т. е. их выполнение прекращается), но соответствующие им структуры ядра не освобождаются. В некотором смысле это "мертвые" процессы. Уничтожение таких процессов одна из обязанностей системного администратора. Появление данных процессов говорит о том, что в Системе что-то не в порядке, и зачастую проблема кроется в аппаратной части ПК. В этом случае необходимо проводить тестирования MHDD (например, сmemtest).
Также, говоря о процессах в ОС, можно выделить особый вид процессов демоны. Данный вид процессов работает в фоне (подобно службам в Windows) без терминала и выполняет задачи для других процессов. Данный вид процессов на серверных системах является основным.