Россия, Казань, Казанский Национальный Исследовательский Технический Университет |
Использование ОС 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.
Как видите, для управления выводом команды 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 Identifier — PID). В строке 3 вы видите процесс init, запущенный ядром. Процессу init назначается PID 1. Остальным процессам, запускающимся после init, идентификаторы процессов назначаются в порядке возрастания. Два процесса не могут иметь одинаковый идентификатор.
В третьей колонке отображается состояние текущего процесса. В табл. 2.3 дается расшифровка всех возможных кодов состояния процесса.
Код | Описание |
---|---|
D | Непрерываемый, находящийся в ожидании |
R | Выполняется |
S | Ожидающий |
T | Отслеживается или остановлен |
Z | Нефункциональный процесс-"зомби" |
W | У процесса нет страниц в памяти (процесс свопирован) |
< | Процесс с высоким приоритетом |
N | Процесс с низким приоритетом |
L | Некоторые страницы оперативной памяти блокированы |
Название процесса отображается в последней колонке листинга. Заключенные в квадратные скобки ([]) процессы вследствие низкой активности были перекачаны из памяти в пространство подкачки на жестком диске. Например, в строках 18–23 показаны выполняющиеся процессы виртуальных консолей сервера Linux. Так как виртуальные сеансы не открывались пользователями, то они не являются активными и были переданы пространству подкачки. Если же пользователь открывает виртуальный сеанс, то соответствующий процесс mingetty будет вызван из области свопинга обратно в память для выполнения. Это создает небольшую задержку, влияющую на производительность приложения. В строках 26–34 вы видите процессы, принадлежащие серверу баз данных Oracle. Некоторые процессы свопируются на жесткий диск, некоторые — остаются в памяти.