Опубликован: 21.11.2006 | Доступ: свободный | Студентов: 1811 / 140 | Оценка: 4.09 / 4.00 | Длительность: 38:34:00
Лекция 2:

Использование ОС Linux в качестве сервера электронной почты

Управление процессами

Операционная система Linux обрабатывает программы как процессы. Управлением процессами занимается ядро системы. Ядром создается первый процесс системы init, который затем запускает остальные процессы в системе. При запуске ядра процесс init загружается в виртуальную память системы. Далее каждому запускающемуся процессу выделяется область виртуальной памяти для хранения данных и кода, который будет выполняться системой.

После запуска процесс init считывает файл /etc/inittab, чтобы определить какие еще процессы следует запустить в системе. В операционной системе Linux применяется система init с различными уровнями запуска (run levels). Уровень запуска может указывать процессу init запускать только определенные типы процессов. В ОС Linux существует пять уровней запуска init.

На уровне запуска 1 могут выполняться только основные системные процессы вместе с одним терминальным процессом, поддерживающим одну консоль. Такой режим работы называется однопользовательским (single-user mode). Однопользовательский режим в основном используется при обслуживании файловой системы сервера. Стандартный уровень запуска init — 3. На этом уровне запуска выполняется большинство прикладных программ, в частности программы обслуживания сети. Еще один часто используемый уровень запуска в ОС Linux — 5. На этом уровне выполняется работа с графической оболочкой X Window. Обратите внимание, как с помощью уровней запуска система Linux управляет функционированием всего ПК. Изменяя уровень запуска процессов с 3-го по 5-й, система Linux совершает переход от работы с консолями к работе в графическом режиме с помощью оболочки X Window.

Для отображения состояния текущих процессов в ОС Linux применяется команда ps. Формат команды:

ps [options],

где в качестве options могут выступать различные опции, в зависимости от которых видоизменяются параметры вывода результатов работы команды. В табл. 2.2 представлены все доступные опции (иногда их называют ключами) команды ps.

Таблица 2.2. Опции команды ps
Опция Описание
l Вывод результата в длинном формате
u Вывод в пользовательском формате (показывает имя пользователя и время запуска)
j Вывод результата в рабочем формате (показывает идентификаторы GID и SID процесса)
s Вывод результата в сигнальном формате
v Вывод результата в vm -формате
m Отображает состояние памяти
f Использует для вывода forest -формат (показывает процессы в виде дерева)
a Показывает процессы других пользователей
x Показывает процессы, не отображая управляющий терминал
S Показывает дочерний CPU, а также время и страницу сбоев
c Название команды для task_struct
e Показывает состояние после командной строки и а+
w Выводит результат в расширенном формате
h Не выводит заголовок
r Показывает только запущенные процессы
n Показывает числовой вывод для USER и WCHAN
txx Показывает процессы, управляемые терминалом ttyxx
O Сортирует вывод процессов по ключам к1, к2 и т.д.
Pids Показывает только процессы с указанными PID

Как видите, для управления выводом команды ps существует много опций. Пример работы этой команды показан в листинге 2.4.

1 [rich@shadrach rich]$ ps ax
2 PID TTY STAT TIME COMMAND
3 1 ? S 0:03 init [5]
4 2 ? SW 0:00 [kflushd]
5 3 ? SW 0:00 [kpiod]
6 4 ? SW 0:02 [kswapd]
7 232 ? S 0:00 portmap
8 278 ? S 0:00 syslogd
9 288 ? S 0:00 klogd
10 301 ? S 0:00 /usr/sbin/atd
11 314 ? S 0:00 crond
12 327 ? S 0:00 inetd
13 348 ? SW 0:00 [lpd]
14 369 ? S 0:00 sendmail: accepting connections on port 25
15 383 ? S 0:00 gpm -t ms
16 396 ? S 0:01 httpd
17 415 ? S 0:13 xfs
18 435 tty1 SW 0:00 [mingetty]
19 436 tty2 SW 0:00 [mingetty]
20 437 tty3 SW 0:00 [mingetty]
21 438 tty4 SW 0:00 [mingetty]
22 439 tty5 SW 0:00 [mingetty]
23 440 tty6 SW 0:00 [mingetty]
24 441 ? S 0:05 /etc/X11/prefdm -nodaemon
25 488 ? S 0:00 kwmsound
26 578 ? S 1:01 ora_pmon_test1
27 580 ? S 0:07 [oracle]
28 582 ? S 0:11 ora_lgwr_test1
29 584 ? S 3:34 ora_ckpt_test1
30 586 ? S 19:38 ora_smon_test1
31 588 ? S 0:00 ora_reco_test1
32 590 ? S 0:00 ora_s000_test1
33 592 ? S 0:00 [oracle]
34 594 ? S 0:00 ora_arc0_test1
35 9102 ? S 0:00 kwmsound
36 9710 ? S 0:26 /usr/X11R6/bin/X
37 18854 ? S 0:05 /oracle/product/8.1.5/bin/tnslsnr LISTENER -i
38 19607 ? S 0:00 httpd
39 19608 ? S 0:00 httpd
40 19609 ? S 0:00 httpd
41 19610 ? S 0:00 httpd
42 19611 ? S 0:00 httpd
43 19657 ? S 0:00 httpd
44 19658 ? S 0:00 httpd
45 19659 ? S 0:00 httpd
46 24844 ? S 0:00 kwmsound
47 24905 ? S 0:00 -:0
48 25357 ? S 0:00 in.telnetd
49 25358 pts/0 S 0:00 login -- rich
58 25359 pts/0 S 0:00 -bash
51 25484 pts/0 R 0:00 ps ax
52 [rich@shadrach rich]$
Листинг 2.4. Пример работы команды ps

В строке 1 задана команда ps. Для отображения всех текущих процессов в системе были заданы опции a и x. В первой колонке отображаются идентификаторы процессов (Process IdentifierPID). В строке 3 вы видите процесс init, запущенный ядром. Процессу init назначается PID 1. Остальным процессам, запускающимся после init, идентификаторы процессов назначаются в порядке возрастания. Два процесса не могут иметь одинаковый идентификатор.

В третьей колонке отображается состояние текущего процесса. В табл. 2.3 дается расшифровка всех возможных кодов состояния процесса.

Таблица 2.3. Коды состояния процесса
Код Описание
D Непрерываемый, находящийся в ожидании
R Выполняется
S Ожидающий
T Отслеживается или остановлен
Z Нефункциональный процесс-"зомби"
W У процесса нет страниц в памяти (процесс свопирован)
< Процесс с высоким приоритетом
N Процесс с низким приоритетом
L Некоторые страницы оперативной памяти блокированы

Название процесса отображается в последней колонке листинга. Заключенные в квадратные скобки ([]) процессы вследствие низкой активности были перекачаны из памяти в пространство подкачки на жестком диске. Например, в строках 18–23 показаны выполняющиеся процессы виртуальных консолей сервера Linux. Так как виртуальные сеансы не открывались пользователями, то они не являются активными и были переданы пространству подкачки. Если же пользователь открывает виртуальный сеанс, то соответствующий процесс mingetty будет вызван из области свопинга обратно в память для выполнения. Это создает небольшую задержку, влияющую на производительность приложения. В строках 26–34 вы видите процессы, принадлежащие серверу баз данных Oracle. Некоторые процессы свопируются на жесткий диск, некоторые — остаются в памяти.