EXIT(2) EXIT(2)
НАЗВАНИЕ
exit, _exit - уничтожение вызвавшего процесса
СИНТАКСИС
void exit (status)
int status;
void _exit (status)
int status;
ОПИСАНИЕ
Системный вызов exit терминирует обратившийся к нему
процесс, при этом последовательно выполняются следующие
действия:
В вызвавшем процессе закрываются все дескрипторы откры-
тых файлов.
Если родительский процесс находится в состоянии вызова
wait, то системный вызов wait завершается, выдавая ро-
дительскому процессу в качестве результата идентифика-
тор терминировавшегося процесса и младшие 8 бит кода
его завершения [см. wait(2)].
Если родительский процесс не находится в состоянии вы-
зова wait, то процесс, вызвавший exit, переходит в сос-
тояние зомби. Это такое состояние, когда процесс зани-
мает только элемент в таблице процессов и не занимает
памяти ни в адресном пространстве пользователя, ни в
адресном пространстве ядра. Элемент таблицы процессов,
занятый зомби-процессом, содержит информацию о времени,
затраченном процессом. Эта информация необходима для
вызова times [см. ].
У всех существующих потомков терминировавшихся процес-
сов, а также у зомби-процессов идентификатор родительс-
кого процесса устанавливается равным 1. Таким образом,
все эти процессы наследуются инициализационным процес-
сом [см. intro(2)].
Все присоединенные разделяемые сегменты памяти отсоеди-
няются и в связанных с ними структурах данных значения
полей shm_nattach уменьшаются на 1.
В каждом семафоре, для которого у процесса имеется зна-
чение semadj, это значение прибавляется к полю semval.
Если процесс удерживал в памяти сегмент команд, данных
или всего себя целиком, то удержание отменяется [см.
plock(2)].
Если включен режим сбора статистической информации, то
в файл сбора статистики помещается запись с информацией
о процессе [см. acct(2)].
Если идентификатор процесса, идентификатор группы тер-
минала и идентификатор группы процессов у процесса,
вызвавшего exit, совпадают, то всем процессам с тем же
идентификатором группы процессов посылается сигнал
SIGHUP.
Родительскому процессу посылается сигнал SIGCLD (завер-
шение порожденного процесса).
C-функция exit перед уничтожением процесса может выпол-
нять некоторые терминирующие действия, например, завер-
шение профилирования. Функция _exit немедленно уничто-
жает вызвавший процесс.
СМ. ТАКЖЕ
acct(2), intro(2), plock(2), semop(2), signal(2),
sigset(2), wait(2).
ПРЕДОСТЕРЕЖЕНИЯ
См. ПРЕДОСТЕРЕЖЕНИЯ в signal(2).
ДИАГНОСТИКА
Диагностика отсутствует, так как из системного вызова
exit управление никогда не возвращается.
|