138
Разумеется, применение этого вызова имеет смысл только при
асинхронном запуске потомка.
Выход из процесса:
exit(exitcode);
приводит к освобождению занятых процессом ресурсов, в том числе и
ресурса памяти. Ресурсы, запрошенные процессом динамически, требуют
явного освобождения процессом (например, процесс должен закрыть все
открытые им файлы), но если процесс "забыл" это сделать, это сделает за
него ОС при выполнении данного вызова. При выполнении exit также
могут выполняться процедуры, заданные вызовами exitlist (см. ниже).
Вызов exit не обязательно должен приводить к немедленному полному
уничтожению процесса. Может сохраняться соответствующая ему запись в
таблице процессов и часть блока контекста, но процесс помечается как
завершенный. Неполное удаление процесса объясняется тем, что после
процесса остается еще некоторая информация, которая может быть
востребована, статистические данные о его выполнении, код завершения
(параметр вызова exit), который будет прочитан вызовом waitchilde в
родителе и т.п. Полное удаление процесса произойдет после того, как вся
остаточная информация будет обработана.
Формирование списка выхода:
exitlist(procaddr);
при помощи этого вызова процесс может установить процедуру (адрес
такой процедуры – параметр вызова), которая должна быть выполнена при
его завершении. Процедуры выхода обычно используются для сохранения
параметров программы и аккуратного закрытия каких-либо важных
ресурсов при аварийном завершении программы. Процесс может выдать
несколько вызовов exitlist, назначив несколько процедур выхода,
которые будут выполняться в неопределенном порядке. Процедура выхода
может также иметь параметр, через который ей будет передаваться