Приветствую Вас Гость | RSS

Уже всё СкаченО

Суббота, 01.02.2025, 22.50.41
Главная » Статьи » Основы UNIX » Основы операционной системы UNIX

Завершение выполнения процесса
Сон и пробуждение

Процесс обычно переводится в состояние сна при обработке системной функции. Если для завершения обработки запроса требуется недоступный ресурс, процесс снимается с процессора и переводится в состояние сна.

Состояние сна - это логическое состояние процесса, при этом он не перемещается физически в памяти. Переход в состояние сна, в первую очередь, определяется занесением в системную таблицу процессов соответствующего флага состояния и события, пробуждающего процесс.

События информируют о доступности того или иного ресурса. Как правило, события связаны с работой периферийных устройств. Наступление одного и того же события может ожидать несколько процессов. Поскольку переход из состояния в состояние акт скорее логический, то и пробуждаются все процессы ожидающие данное событие. Это приводит к смене состояния со "сна" на "готов к выполнению", и соответствующие процессы помещаются в очередь на запуск. Задачу выбора процесса для запуска решает планировщик.

Поскольку планировщик принимает решение о запуске процесса, основываясь на приоритетах, единственным способом установить "справедливый" порядок запуска процессов является присвоение определенного приоритета каждому событию.
Завершение выполнения процесса

Процесс завершает работу при выполнении системного вызова exit. Процесс может сам завершить свою работу, в соответствии с алгоритмом, либо может быть прекращен ядром.

При завершении процесса последовательно выполняются следующие действия:
Отключаются все сигналы.
В вызвавшем процессе закрываются все дескрипторы открытых файлов.
Если родительский процесс находится в состоянии вызова wait, то системный вызов wait завершается, выдавая родительскому процессу в качестве результата идентификатор завершившегося процесса, и младшие 8 бит его кода завершения.
Если родительский процесс не находится в состоянии вызова wait, то завершающийся процесс переходит в состояние зомби.

У всех существующих потомков завершенных процессов, а также у зомби-процессов идентификатор родительского процесса устанавливается равным 1. Таким образом, они становятся потомками процесса инициализации (init).

Если идентификатор процесса, терминальная линия и идентификатор группы процессов у завершающегося процесса совпадают, то всем процессам с тем же идентификатором группы процессов посылается сигнал SIGHUP. Тем самым, завершаются и все порожденные в приоритетном режиме процессы.

Родительскому процессу посылается сигнал SIGCHLD (завершение порожденного процесса). Этот сигнал пробуждает родительский процесс, если тот ожидает завершения порожденных процессов.
Получение информации о процессах

Для получения информации о состоянии процессов используется команда ps. Она имеет следующий синтаксис:
ps [-acdelfjLP]
  [-t список_терминалов]
  [-p список_идентификаторов_процессов]
  [-u|U список_идентификаторов_пользователей]
  [-g список_идентификаторов_лидеров_групп]

Категория: Основы операционной системы UNIX | Добавил: Fishing (12.10.2009)
Просмотров: 497 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]