Linux: Полное руководство — страница 35 из 98

9.2.1. Иерархия процессов: ps и pstree

О том, что команда ps позволяет просмотреть сведения обо всех процессах, протекающих в системе в данный момент, вы уже знаете (п.3.2). С ключом -f эта команда выводит как PID самого процесса, так и PPID его родителя, то есть по ее выводу можно восстановить всю структуру дерева процессов до их общего предка — процесса init. «Древовидный» взгляд может понадобиться, например, если вам нужно уничтожить целую группу процессов, происходящих от общего предка: в этом случае вы можете не убивать их по очереди, а просто послать сигнал TERM их родительскому процессу.

Команда pstree представляет дерево процессов сразу в наглядном виде:

$ pstree

init┬acpid

├atd

├bonobo-activati

   ...

├crond

├gconfd-2

├gdm-binary──gdm-binary┬X

└gnome-session

├gnome-panel

├gnome-settings-

├gnome-terminal┬bash─pstrее

├bash─su─bash─man─sh─sh—i┬less

││└─nroff—iconv

├bash─su─bash

│└gnome-pty-helpe

   ...

├syslogd

├udevd

└xinetd

Ключ -p выводит вместе с именем процесса его PID, а ключ -u — имя пользователя, запустившего процесс. Если в качестве аргумента указать PID, то команда выведет не все дерево, а только ветку потомков процесса с этим PID. Имя пользователя в качестве аргумента требует вывести все ветки процессов, запущенных этим пользователем: у них общего предка может и не быть.

9.2.2. Информация о ресурсах системы: команды free, df, du

Команда free показывает общее количество занятой и свободной памяти: физической, в разделе подкачки и в буферах ядра. По умолчанию объем памяти выводится в килобайтах, а ключи -b и -m позволяют измерять его в байтах и мегабайтах соответственно.

Ключ -s <число> требует опрашивать систему непрерывно, через каждые <число> секунд, пока вы не прервете выполнение команды, нажав Ctrl+С.

Команды df (disk free) и du (disk usage) показывают, сколько места доступно и занято на жестком диске.

Утилита df выводит сведения о дисковом пространстве на всех смонтированных в данный момент файловых системах — как локальных, так и сетевых:

$ df

Файловая система 1K-блоков    Исп Доступно Исп% смонтирована на

/dev/hda4        22200824 4630864 16442200  22% /

/dev/hda2          101105    8383    87501   9% /boot

/dev/hda6        10221420 1737440  8483980  17% /mnt/win_disk_e

//user5/share     7543680 4623488  2920192  62% /mnt/win_user5

С ключом -i команда

df
измеряет дисковое пространство не в блоках, а в индексных дескрипторах (п.2.2.1), а с ключом
-T
показывает тип файловой системы. О других ключах можно узнать, как обычно, на man-странице.

Команда du показывает, сколько места занимает каждый подкаталог каталогов, указанных в качестве аргумента (если аргументы не указаны, то это будет текущий каталог), и подсчитывает общий итог. Если у вас недостаточно прав на просмотр некоторых подкаталогов, то итог будет отличаться от правильного на размер запрещенных каталогов.

9.2.3. Процессы в реальном времени: команда top

Команда top предназначена для наблюдения за процессами в реальном времени и интерактивного управления ими. Терминал, на котором запущена программа top, превращается в окно, разделенное на области (рис. 9.4, сверху вниз):

♦ сведения о системе — продолжительность текущего сеанса, количество задач, использование памяти и процессора, средняя длина очереди задач, ожидающих выполнения (load average) и т.п.;

♦ командная строка;

♦ заголовки столбцов;

♦ область задач. Задачи в терминологии top — это не только пользовательские процессы — потомки init, но и системные процессы — части ядра.

Рис. 9.4. Программа top запущена на виртуальном терминале

Каждые несколько секунд (по умолчанию 3 секунды) окно обновляется.

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

h — вызов справки;

q — завершение работы программы (для выхода можно нажать и комбинацию Ctrl+C);

u — показывать только процессы, запущенные определенным пользователем (следует указывать его регистрационное имя, а не UID);

d — изменить интервал обновления;

f — добавить или удалить столбцы;

F — изменить столбец, по которому сортируются задачи. По умолчанию это %CPU — доля использованного процессорного времени, но можно сортировать, например, по убыванию объема занятой памяти;

i — переключатель отображения: либо все задачи, либо только активные (в состоянии Running);

k — отправить процессу сигнал. Программа спросит у вас PID процесса, а затем номер или название сигнала. По умолчанию посылается сигнал TERM;

r — изменить приоритет процесса.

Количество и порядок отображаемых свойств процесса (столбцов) можно изменять. Всего доступно 26 свойств процесса (нумеруемых буквами английского алфавита), и соответствующие им заголовки столбцов перечислены в секции DESCRIPTIONS of Fields man-страницы команды top. На рис. 9.4 (команда top запущена с настройками по умолчанию) отображены следующие свойства:

♦ PID — PID процесса;

♦ USER — регистрационное имя владельца процесса;

♦ PR — приоритет;

♦ NI — показатель уступчивости (см. п.9.2.4);

♦ VIRT — занятая виртуальная память в килобайтах;

♦ RES — физическая (без подкачки) память, занятая процессом;

♦ SHR — объем разделяемой памяти, используемой процессом;

♦ S — состояние процесса;

♦ %CPU — доля процессорного времени, доставшаяся процессу с момента последнего обновления экрана;

♦ %MEM — доля занятой процессом физической памяти;

♦ TIME+ — процессорное время, израсходованное с момента запуска процесса, в секундах с сотыми долями;

♦ COMMAND — либо имя исполняемого файла программы, либо вся командная строка с аргументами. Режим переключается вводом в командную строку команды «с».

Процесс может находиться в одном из следующих состояний, отображаемых в столбце «S»:

♦ R (Running) — активен, то есть находится в основной памяти и ждет выделения ему процессорного времени либо уже выполняется;

♦ S (Sleeping) — выгружен из основной памяти;

♦ T (Traced) — приостановлен, например, в ходе отладки;

♦ D — состояние непрерываемого ожидания: процесс может быть «разбужен» только прямым (direct) сигналом от оборудования;

♦ Z — зомби. Это процесс, родитель которого не получил сигнала о завершении потомка и не очистил связанные с ним структуры ядра. То есть дочернего процесса нет, он не тратит процессорного времени и других ресурсов, а запись в таблице процессов осталась. Такие процессы нужно убивать вручную.

9.2.4. Приоритет процесса: команды nice и renice

Каждому процессу в системе назначен определённый приоритет, который учитывается планировщиком процессов при выделении процессу процессорного времени. Значение приоритета находится в диапазоне от -20 (наивысший приоритет) до 19 (наименьший: процесс выполняется только тогда, когда нет других претендентов на время процессора). Значение, обратное приоритету, называется показателем уступчивости (nice).

По умолчанию все процессы запускаются с базовым приоритетом, равным 0. Владелец процесса может в любой момент повысить его показатель уступчивости (понизить приоритет). Суперпользователь имеет право установить для любого процесса любое значение приоритета.

Если процесс отъедает слишком много ресурсов, то для нормального функционирования системы не обязательно его убивать: достаточно назначить ему низкий приоритет. Тогда планировщик предоставит ему меньше циклов процессора, и его выполнение займет больше времени, зато в течение этого времени можно будет выполнять другие задачи.

Для запуска процесса с приоритетом, отличным от базового, служит команда nice:

nice [ -n <приоритет> ] [командная_строка]

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

$ nice -n 19 dd if=/media/cdrecorder of=~/my_cdrom.iso

Значение нового приоритета по умолчанию равно 10. Команда

nice
без аргументов выводит текущее значение базового приоритета.

Для изменения приоритета уже запущенного процесса служит команда

renice
:

renice -n <показатель_уступчивости> [-p PID] [-u UID]

Суперпользователь имеет право назначать процессу (или всем процессам указанного пользователя) отрицательный показатель уступчивости, то есть повышать их приоритет. Если указанное значение уступчивости выходит за границы диапазона [-20...19], то вместо него применяется соответствующее крайнее значение.

9.2.5. Фоновый режим: команды jobs, fg, bg

В п.3.2 я уже говорил, что родительский процесс может либо ждать завершения дочернего, либо продолжать свое выполнение. Если в роли родителя выступает командная оболочка, то это значит, что процессы, запущенные с одной консоли (или виртуального терминала), распадаются на две группы: те, которых оболочка ждет, — они взаимодействуют с пользователем, занимая консоль, — и те, после запуска которых с пользователем взаимодействует сама оболочка (консоль свободна). Эти группы называются передним и задним планами.

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

Подкоманды оболочки jobs, bg (background) и fg (foreground) позволяют манипулировать заданиями, выполняющимися на переднем и заднем планах:

♦ Команда jobs выводит список процессов, которые выполняются в фоновом режиме,

fg<номер_задания> переводит процесс на передний план,

bg<номер_задания> — переводит процесс на задний план.

Номер задания — это не PID, а число, которое команда jobs выводит в квадратных скобках. С ключом -I она будет выводить, кроме того, и PID процесса.

Поскольку перечисленные команды — не самостоятельные утилиты, а подкоманды bash, справку по ним нужно запрашивать так:

help <подкоманда>
.

9.3. Протоколирование системы