Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен UNIX.docx
Скачиваний:
25
Добавлен:
11.06.2015
Размер:
532.39 Кб
Скачать

Сон и пробуждение

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

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

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

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

Завершение выполнения процесса

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

При завершении процесса последовательно выполняются следующие действия:

  1. Отключаются все сигналы.

  2. В вызвавшем процессе закрываются все дескрипторы открытых файлов.

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

  4. Если родительский процесс не находится в состоянии вызова wait, то завершающийся процесс переходит в состояние зомби.

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

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

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

Получение информации о процессах

Для получения информации о состоянии процессов используется команда ps. Она имеет следующий синтаксис:

ps [-acdelfjLP]    [-t список_терминалов]    [-p список_идентификаторов_процессов]    [-u|U список_идентификаторов_пользователей]    [-g список_идентификаторов_лидеров_групп]    [-G список_числовых_идентификаторов_групп]

Основные опции команды ps в системах SVR4 и BSD описаны в табл. 16.

Таблица 16. Опции команды ps

Опция

Назначение

-a

Предоставляет информацию обо всех процессах, кроме групповых, и не связанных с терминалом.

-d

Предоставляет информацию обо всех процессах, исключая лидеров сеанса.

-e

Предоставляет информацию обо всех процессах.

-l

Генерирует длинный листинг.

-f

Генерирует полный листинг.

-g список

Выводит информацию только о процессах, для которых указаны идентификаторы лидеров групп. Лидер группы - это процесс, номер которого идентичен его идентификатору группы. Командный интерпретатор, запускаемый при входе в систему, является стандартным примером лидера группы.

-G список

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

-p список

Предоставляет информацию по процессам с указанными идентификаторами.

-t список

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

-U список

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

-u список

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

Основные поля в результатах выполнения команды ps представлены в табл. 17.

Таблица 17. Основные характеристики процессов, предоставляемые командой ps

Заголовок

Значение

ADDR

Адрес процесса в памяти.

С

Доля выделенного планировщиком времени ЦП.

COMD

Имя команды и аргументы (для опции -f).

F

Флаги (шестнадцатеричные), логическая сумма которых дает следующие сведения о процессе:

00 - процесс терминирован; элемент таблицы процессов свободен; 01 - системный процесс: всегда в основной памяти; 02 - процесс трассируется родительским процессом; 04 - родительский трассировочный сигнал остановил процесс; родительский процесс ждет [см. ptrace(2)]; 08 - процесс не может быть разбужен сигналом; 10 - процесс в основной памяти; 20 - процесс в основной памяти; блокирован до завершения события; 40 - идет сигнал к удаленной системе; 80 - процесс в очереди на ввод-вывод.

NI

Поправка приоритета.

PID

Идентификатор процесса.

PPID

Идентификатор родительского процесса.

PRI

Текущий приоритет процесса.

S

Состояние процесса:

B,W - процесс находиться в состоянии ожидания; I - создание процесса; O - процесс выполняется; R - находиться в очереди готовых к выполнению процессов; S - процесс не активен; T - процесс трассируется; X - ожидает дополнительной оперативной памяти; Z - процесс "зомби".

STIME

Время запуска процесса.

SZ

Размер (в блоках по 512 байт) образа процесса в памяти.

TIME

Общее время выполнения для процесса

TTY

Терминальная линия процесса

UID

Идентификатор пользователя владельца процесса

WCHAN

Адрес события, которого ожидает процесс. У активного процесса этот столбец - пустой.

В зависимости от переданных опций и реализации, команда ps может выдавать и другие атрибуты. Команду ps может выполнять любой пользователь. Рассмотрим простой пример:

[kravchuk@arturo 15:59:30 /]$ ps

PID TTY TIME CMD

3697 pts/14 0:00 bash

[kravchuk@arturo 15:59:33 /]$ ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

8 S 31061 3697 3679 0 51 20 e3110048 499 e31100b4 pts/14 0:00 bash

[kravchuk@arturo 15:59:38 /]$ ps -p 5726

PID TTY TIME CMD

5726 pts/1 0:00 mc