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





