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