Процессы, попарно связанные дочерне-родительскими отношениями, формируют дерево процессов операционной системы.
Первый процесс 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 являются условными и изображаются в квадратных скобках.