Дерево процессов Linux

Процессы, попарно связанные дочерне-родительскими отношениями, формируют дерево процессов операционной системы.

Дерево процессов Linux

Первый процесс init, называемый прародителем процессов порождается ядром операционной системы после инициализации и монтирования корневой файловой системы, откуда и считывается программа /sbin/init.

Прародитель процессов всегда имеет PID=1, а его основной задачей является запуск разнообразных системных служб, включая запуск обработчиков, алфавитно-цифрового терминального доступа getty, менеджера дисплеев графического доступа и службы дистанционного доступа SSH.

Кроме того, init назначается приемным родителем для осиротевших процессов и может (в зависимости от реализации, см «альтернативы» W:[init]) отслеживать аварийные завершения запускаемых ими служб и перезапускать их.

В примере из листинга ниже показано дерево процессов, построенное при помощи специальной команды pstree, а в листинге далее — «классическое» представление дерева процессов при помощи команды ps.

Дерево процессов

fitz@ubuntu:~$ pstree -cnAh

init-+-upstart-udev-br

|-udevd-+-udevd

|                 ‘-udevd

|-sshd

|-rsyslogd-+-{rsyslogd}

|                   |-rsyslogd-

|                    ‘-{rsyslogd}

|-cupsd
|-NetworkManager-+-{NetworkManager}
|                                    |-{NetworkManager}
|                                    |-dhclient
|                                    ‘-dnsmasq
|-getty

|-getty
|-login—bash—passwd
|-getty

|-getty

|-cron

| -atd

|-acpid
| -lightdm-+-{lightdm}
|                   |-Xorg
|                   | -{lightdrn}
|                   ‘-lightdm-+-{lightdm}
|                                      ‘-gnone-session-+-ssh-agent
|                                                                     |-{gnome-session}
|                                                                     |-{gnome-session}
|                                                                     |-{gnome-session}
|                                                                     |-compiz-+-{compiz}
|                                                                     |                 |-{compiz}
|                                                                     |                 |-{compiz}
|                                                                     |                  ‘-sh—gnome-terminal-+-{gnome-terminal}
|                                                                     |                                                             |-{gnome-terminal}

|                                                                     |                                                             |-gnome-pty-helpe

|                                                                     |                                                             |-bash—pstree

Процессы операционной системы принято классифицировать на системные (ядерные), демоны и прикладные, исходя из их назначения и свойств (листинг ниже).

Прикладные процессы выполняют обычные пользовательские программы (например, утилиту man), для чего им выделяют индивидуальную память, объем которой указан в столбце VSZ вывода команды ps.

Такие процессы обычно интерактивно взаимодействуют с пользователем посредством управляющего терминала (за исключением графических программ), указанного в столбце TTY.

Демоны (daemons) выполняют системные программы, реализующие те или иные службы операционной системы. Например, cron реализует службу периодического выполнения заданий, atd — службу отложенного выполнения заданий, rsyslogd — службу централизованной журнализации событий, sshd — службу дистанционного доступа, udevd — службу «регистрации» подключаемых устройств, т. д.

Демоны запускаются на ранних стадиях загрузки операционной системы и взаимодействуют с пользователем не интерактивно при помощи терминала, а опосредованно — при помощи своих утилит. Таким образом, отсутствие управляющего терминала в столбце TTY отличает их от прикладных процессов. Зачастую демоны имеют суффикс d в конце названия, например sshd — это secure shell daemon, a rsyslogd — rocket system logging daemon, и т. д.

Процессы ядра, демоны, прикладные процессы

fitz@ubuntu:~$ ps faxu

USER         PID  %CPU  %МЕМ         VSZ      RSS    TTY          STAT     START       TIME  COMMAND
root                 2         0.0        0.0               0          0          ?           S            Nov19          0:00   [kthreadd]
root                 3         0.0        0.0               0           0         ?           S            Nov19          0:08    \_ [ksoftirqd/0]
root                 5         0.0         0.0              0           0         ?           S<         Nov19           0:00   \_ [kworker/0:0H]
root                 7         0.0         0.0              0           0         ?            S           Nov19            1:17    \_ [rcu_sched]
root                8          0.0         0.0              0           0         ?           S            Nov19           0:00   \_ [rcu_bh]
root                1           0.0         0.0        3652    1988         ?           Ss          Nov19           0:01    /sbin/init
root            394         0.0         0.0         3280    1536        ?            Ss          Nov19           0:00  /sbin/udevd —daemon
root             655         0.0         0.0        6680    2420        ?           Ss           Nov19           0:00 /usr/sbin/sshd -D
syslog          936        0.0         0.0      31064     1540        ?           Sl            Nov19           0:15   rsyslogd -c5
root           1344         0.0         0.0        2620       932        ?          Ss            Nov19          0:00   cron
daemon    1345         0.0         0.0        2472       348        ?           Ss            Nov19          0:00   atd
root           2395         0.0         0.0         3920   2000       tty1       Ss            Nov19          0:00   /bin/logln —
fitz            9953          0.0         0.1        13516    8552        tty1       S             Nov20          0:00      \_ -bash
fitz          10058          0.0         0.0        6352     1712        tty1       S+           Nov20          0:00           \_ man ps
fttz          10069          0.0         0.0        5836     860        tty1       S+           Nov20          0:00                   \_ pager -s

Системные (ядерные) процессы (правильнее — ядерные нити, т. к. выполняются они в общей памяти ядра операционной системы) выполняют параллельные части ядра операционной системы, поэтому не обладают ни индивидуальной виртуальной памятью VSZ, ни управляющим терминалом TTY.

Более того, ядерные процессы не выполняют отдельную программу, загружаемую из ELF-файла, поэтому их имена COMMAND являются условными и изображаются в квадратных скобках.

 

Добавить комментарий