Исследование процессов


Записаться на интенсивный курс английского языка модно здесь
Доставка суши на дом в Днепропетровске http://gurmans.dp.ua/banzay/mironova/menu.

В любой UNIX-подобной системе все процессы связаны между собой отношениями «родитель-потомок». Во время загрузки FreeBSD в результате запуска init(8) создается единственный процесс, которому присваивается идентификатор PID, равный 1. Этот процесс запускает другие процессы, такие как сценарий начальной загрузки /etc/rc и программа getty(8), которая обслуживает вход в систему. Эти процессы являются дочерними по отношению к процессу с идентификатором 1. Когда пользователь выполняет вход в систему, программа getty(8) запускает новый командный интерпретатор, который становится дочерним процессом по отношению к getty. Команды, запускаемые пользователем, становятся либо дочерними процессами по отношению к командному интерпретатору, либо его частью. Просмотреть эти отношения «родитель-потомок» можно с помощью команды ps(1) с ключами -ajx (помимо других).

В первой колонке выводится имя пользователя, владеющего процессом, далее следуют идентификаторы самого процесса (PID) и его «родителя» (PPID). Это самая полезная для нас информация, которую здесь можно видеть, но мы вкратце рассмотрим и другие колонки.

Колонка PGID — это числовой идентификатор группы процессов, который обычно наследуется от родительского процесса. Программа может запустить новую группу процессов, и эта новая группа получит идентификатор PGID, равный идентификатору процесса. Значение идентификатора группы процессов используется для обработки сигналов и управления заданиями. Идентификатор сеанса, или SID: сеанс — это коллекция из одной или более групп процессов (PGID), которые обычно запускаются одним тем же пользователем или демоном. Процессы не могут переходить из одного сеанса в другой. Колонка JOBC содержит счетчик механизма управления заданиями и свидетельствует о том, что процесс был запущен под управлением этого механизма (то есть в фоновом режиме).

Колонка STAT показывает состояние процесса, то есть чем именно занимался процесс в момент запуска команды ps(1). Информация о состоянии процесса очень полезна, так как сообщает, простаивает ли процесс, в ожидании чего он простаивает и т. д. Настоятельно рекомендую прочитать раздел страницы руководства ps(1), в котором рассказывается о состояниях процессов.

В колонке ТТ указывается управляющий терминал процесса. В этой колонке выводится только окончание имени терминала, например, v0 — для ttyv0 или р0 — для ttyp0. В примере показаны только процессы, не имеющие управляющего терминала, о чем свидетельствует значение ??, однако вскоре мы увидим другой пример, с информацией об управляющих терминалах.

Колонка TIME показывает, как много процессорного времени было использовано процессом в пространстве пользователя и в пространстве ядра.

В последней колонке COMMAND приводится имя команды, запущенной родительским процессом. Процессы, имена которых приводятся в квадратных скобках, — это потоки ядра, а не настоящие процессы.

Итак, как эта информация поможет в исследовании процессов? Наш пример вывода команды top(1) показал, что источником всей дисковой активности является процесс 3064. Запустим команду ps -ajx и посмотрим информацию об этом процессе:

Владельцем интересующего нас процесса (4) является пользователь root, и это экземпляр tcsh(1), о чем также сообщала команда top(1) в режиме отображения информации об операциях ввода-вывода. Однако в действительности этот командный интерпретатор был запущен под su(1), а это означает, что за проблемой производительности стоит реальный человек. Процесс 3064 — потомок процесса 2990 (3), который является потомком процесса 2989 (2), причем, владельцем обоих процессов является пользователь root. Однако процесс 2989 является потомком процесса 2981 (1) — командного интерпретатора, запущенного реальным пользователем. Вы можете заметить и то, что все эти процессы принадлежат одному и тому же сеансу с идентификатором 2981. В колонке ТТ выводится значение р1, которое говорит о том, что пользователь вошел в систему через терминал /dev/ttyp1, второй виртуальный* терминал на этой машине.

Это нормально, когда система испытывает короткие периоды полной занятости. Если никто больше не использует систему и никто не жалуется на падение производительности, почему бы не позволить этому пользователю запускать свои задания? Однако если этот процесс вызывает проблемы у других пользователей, мы можем понизить его приоритет, завершить работу задания, воспользовавшись привилегиями root, или зайти к этому пользователю в кабинет с бейсбольной битой.

Комментарии запрещены.