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

Процесс завершает работу при выполнении системного вызова 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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: