Завершение выполнения процесса
Завершение выполнения процесса
Процесс завершает свое выполнение с помощью функции exit(). Эта функция может быть вызвана системным вызовом exit(2), а если завершение процесса вызвано получением сигнала, функцию exit() вызывает само ядро. Функция exit() выполняет следующие действия:
? Отключает все сигналы.
? Закрывает все открытые файлы.
? Сохраняет статистику использования вычислительных ресурсов и код возврата в записи proc таблицы процессов.
? Изменяет состояние процесса на "зомби".
? Делает процесс init(1M) родительским для всех потомков данного процесса.
? Освобождает адресное пространство процесса, u-area, карты отображения и области свопинга, связанные с процессом.
? Отправляет сигнал SIGCHLD родительскому процессу, уведомляя его о "смерти" потомка.
? Пробуждает родительский процесс, если тот ожидает завершения потомка.
? Запускает функцию переключения контекста, в результате чего высокоприоритетный процесс получает доступ к вычислительным ресурсам.
После завершения выполнения функции exit() процесс находится в состоянии "зомби". При этом от процесса остается запись proc в таблице процессов, содержащая статистику использования вычислительных ресурсов и код возврата. Эта информация может потребоваться родительскому процессу, поэтому освобождение структуры proc производит родитель с помощью системного вызова wait(2) возвращающего статистику и код возврата потомка. Если родительский процесс заканчивает свое выполнение раньше потомка, "родительские права" переходят к процессу init(1M). В этом случае после смерти потомка init(1M) делает системный вызов wait(2) и освобождает структуру proc.
Другая ситуация возникает, если потомок заканчивает свое выполнение раньше родителя, а родительский процесс не производит вызова wait(2). В этом случае структура proc потомка не освобождается и процесс продолжает находиться в состоянии "зомби" до перезапуска операционной системы. Хотя такой процесс (которого, вообще говоря, не существует) не потребляет ресурсов системы, он занимает место в таблице процессов, тем самым уменьшая максимальное число активных задач.
Данный текст является ознакомительным фрагментом.