Таблица 10.2. Заголовки столбцов при выполнении ps в стиле BSD
Заголовок
Значение
USER
Идентификатор пользователя. Это владелец процесса
%CPU
Использование процессора в процентах
%MEM
Использование памяти в процентах
VSZ
Объем виртуальной памяти
RSS
Размер страниц памяти. Объем физической памяти (ОЗУ), используемой процессом, кб
START
Время запуска процесса. Для значений свыше 24 часов выводится дата
Просмотр состояния процессов в динамике с помощью top
Команда ps предоставляет массу информации о том, что делается в компьютере, но она дает только мгновенный снимок, то есть возвращаемая ею информация действительна лишь на момент вызова команды. Чтобы увидеть работу компьютера в динамике, воспользуемся командой top:
[[email protected] ~]$ top
Программа top постоянно обновляет информацию о процессах (по умолчанию с периодом, равным 3 секундам), чтобы показать их активность с течением времени. Имя программы top отражает тот факт, что она используется для просмотра «топа» (наиболее активных) процессов в системе. Вывод команды top делится на две части: сводная информация о системе и таблица процессов, отсортированных по потреблению ими процессора:
top - 14:59:20 up 6:30, 2 users, load average: 0.07, 0.02, 0.00
Tasks: 109 total, 1 running, 106 sleeping, 0 stopped, 2 zombie
Cpu(s): 0.7%us, 1.0%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si
Mem: 319496k total, 314860k used, 4636k free, 19392k buff
Swap: 875500k total, 149128k used, 726372k free, 114676k cach
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6244 me 39 19 31752 3124 2188 S 6.3 1.0 16:24.42 trackerd
11071 me 20 0 2304 1092 840 R 1.3 0.3 0:00.14 top
6180 me 20 0 2700 1100 772 S 0.7 0.3 0:03.66 dbus-dae
6321 me 20 0 20944 7248 6560 S 0.7 2.3 2:51.38 multiloa
4955 root 20 0 104m 9668 5776 S 0.3 3.0 2:19.39 Xorg
1 root 20 0 2976 528 476 S 0.0 0.2 0:03.14 init
2 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migratio
4 root 15 -5 0 0 0 S 0.0 0.0 0:00.72 ksoftirq
5 root RT -5 0 0 0 S 0.0 0.0 0:00.04 watchdog
6 root 15 -5 0 0 0 S 0.0 0.0 0:00.42 events/0
7 root 15 -5 0 0 0 S 0.0 0.0 0:00.06 khelper
41 root 15 -5 0 0 0 S 0.0 0.0 0:01.08 kblockd/
67 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kseriod
114 root 20 0 0 0 0 S 0.0 0.0 0:01.62 pdflush
116 root 15 -5 0 0 0 S 0.0 0.0 0:02.44 kswapd0
Раздел со сводной информацией содержит массу интересных сведений. Описание выводимой в этом разделе информации приводится в табл. 10.3.
Таблица 10.3. Поля в разделе со сводной информацией команды top
Строка
Поле
Значение
1
top
Имя программы
14:59:20
Текущее время
up 6:30
Это поле называется uptime (продолжительность работы). Показывает время, прошедшее с момента последней загрузки системы. В данном примере система проработала 6? часа
2 users
В системе работают два пользователя
load average:
Средняя нагрузка (load average) — это число процессов, ожидающих возобновления работы; то есть число процессов, находящихся в состоянии «выполняется» и совместно использующих процессор. Здесь показаны три значения для разных интервалов времени. Первое значение отражает среднюю нагрузку за последние 60 секунд, второе — за последние 5 минут и третье — за последние 15 минут. Значения ниже 1.0 сообщают, что система не нагружена
2
Tasks:
Суммарное число процессов в разных состояниях
0.7%us
0,7% процессорного времени затрачено на выполнение пользовательских (user) процессов. Под этим подразумеваются процессы за пределами самого ядра
1.0%sy
1,0% процессорного времени затрачено на выполнение системных (system) процессов (ядра)
0.0%ni
0,0% процессорного времени затрачено на выполнение уступчивых (nice), то есть низкоприоритетных, процессов
98.3%id
1,0% процессорного времени составили простои
4
Mem:
Объем использованной физической памяти (ОЗУ)
5
Swap:
Объем использованного пространства в файле подкачки (виртуальная память)
Программа top принимает ряд команд с клавиатуры. Наибольший интерес представляет команда h, которая выводит экран со справочной информацией, и q, которая завершает top.
Оба основных окружения рабочего стола включают приложения с графическим интерфейсом, отображающие аналогичную информацию (подобно тому, как это делает Task Manager (Диспетчер задач) в Windows), но я считаю, что top лучше своих аналогов с графическим интерфейсом, потому что она работает быстрее и потребляет меньше системных ресурсов. В конце концов, программа мониторинга системы не должна замедлять систему, за которой мы наблюдаем.
Управление процессами
Теперь, когда мы можем видеть процессы и наблюдать за ними, можно приступать к управлению ими. Роль подопытной морской свинки в наших экспериментах исполнит маленькая программка xlogo. Программа xlogo — это демонстрационная программа, поставляемая в составе X Window System (механизм создания графического изображения на дисплее), которая просто отображает окно с логотипом X. Для начала давайте познакомимся с объектом экспериментов:
[[email protected] ~]$ xlogo
После ввода команды на экране должно появиться небольшое окно с логотипом. В некоторых системах xlogo может выводить предупреждающее сообщение, но его можно смело игнорировать.
ПРИМЕЧАНИЕ
Если программа xlogo отсутствует в системе, попробуйте вместо нее использовать gedit или kwrite.
Чтобы убедиться, что xlogo работает, попробуйте изменить размеры ее окна. Если после изменения размеров содержимое окна перерисовывается, значит, программа работает.
Заметили ли вы, что командная оболочка не вывела приглашения к вводу после выполнения команды? Это объясняется тем, что командная оболочка ждет, пока программа завершится. То же самое происходило со всеми программами, которые мы запускали до сих пор. Если закрыть окно xlogo, оболочка выведет приглашение к вводу.
Прерывание процесса
Давайте понаблюдаем, что происходит после запуска xlogo. Сначала введите команду xlogo и убедитесь, что программа работает. Затем вернитесь в окно терминала и нажмите комбинацию CTRL+C.
[[email protected] ~]$ xlogo
[[email protected] ~]$
Комбинация CTRL+C в терминале прерывает выполнение программы. Фактически мы вежливо попросили программу завершиться. После нажатия CTRL+C окно xlogo закроется и командная оболочка выведет приглашение к вводу.
Таким способом можно прервать выполнение многих (но не всех) программ командной строки.
Перевод процессов в фоновый режим
Представьте, что нам потребовалось вернуться в командную оболочку, не прерывая выполнения программы xlogo. Мы можем сделать это, переведя программу в фоновый режим работы. Считайте, что терминал имеет передний план (то, что видно на поверхности, например приглашение к вводу) и задний план (фон, то, что скрыто под поверхностью). Чтобы запустить программу сразу в фоновом режиме, нужно добавить в конец команды символ амперсанда (&):
[[email protected] ~]$ xlogo &
[1] 28236
[[email protected] ~]$
После ввода такой команды на экране появится окно xlogo, а командная оболочка вернется в приглашение к вводу, но перед этим выведет таинственные числа. Это сообщение является частью механизма управления заданиями (job control). Таким способом командная оболочка сообщает, что мы запустили задание с номером 1 ([1]) и оно получило идентификатор процесса PID 28236. Если теперь выполнить команду ps, можно увидеть этот процесс:
[[email protected] ~]$ ps
PID TTY TIME CMD
10603 pts/1 00:00:00 bash
28236 pts/1 00:00:00 xlogo
28239 pts/1 00:00:00 ps
Механизм управления заданиями также дает возможность вывести список заданий, запущенных в терминале. Этот список можно получить командой jobs:
[[email protected] ~]$ jobs
[1]+ Running xlogo &
Результаты показывают, что у нас имеется одно выполняющееся задание с номером 1, которое было запущено командой xlogo &.
Возврат процесса на передний план
Процесс в фоновом режиме не получает ввод с клавиатуры, в том числе не видит попыток прервать его комбинацией CTRL+C. Вернуть процесс на передний план можно командой fg, как в следующем примере:
[[email protected] ~]$ jobs
[1]+ Running xlogo &
[[email protected] ~]$ fg %1
xlogo
За командой fg должен следовать знак процента и номер задания (эта комбинация называется спецификатором задания, или jobspec). Если имеется только одно фоновое задание, спецификатор можно опустить. Теперь завершим xlogo вводом CTRL+C.
Приостановка процесса
Иногда необходимо приостановить процесс на время, не завершая его. Это часто делается с целью перевести процесс переднего плана в фоновый режим. Чтобы приостановить процесс переднего плана, используйте комбинацию CTRL+Z. Давайте попробуем. В командной строке введите команду xlogo, нажмите ENTER, а затем комбинацию CTRL+Z: