Модуль 05 — Процессы и службы

Что сейчас работает на машине, как это остановить и запустить снова

Прогресс курса Модуль 5 из 9

Что вы освоите в этом модуле

01

Процесс

Процесс — запущенная программа: код, память, открытые файлы и пользователь, от имени которого она работает. Одна программа может быть запущена много раз — это разные процессы. У каждого есть номер PID и номер родителя PPID: процессы образуют дерево, в корне которого — systemd с PID 1, его запускает ядро при загрузке.

$ ps -ef --forest | grep -A2 sshd:
root       640       1  0 авг26 ?     00:00:00 sshd: /usr/sbin/sshd -D [listener]
root    952707     640  0 21:39 ?     00:00:00  \_ sshd-session: student [priv]
student 952715  952707  0 21:39 ?     00:00:00      \_ sshd-session: student@pts/0

Служба SSH (PID 640) на каждое подключение порождает дочерний процесс, тот — оболочку пользователя, а оболочка — каждую набранную команду. Когда команда завершается, процесс исчезает, а родитель получает код завершения.

02

Список процессов: ps и pgrep

ps без опций показывает только процессы текущего терминала. На практике используют ps aux — все процессы всех пользователей:

$ ps aux | head -4
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.3  24008 14760 ?        Ss   авг26   1:47 /usr/lib/systemd/systemd --system
root           2  0.0  0.0      0     0 ?        S    авг26   0:02 [kthreadd]
root           3  0.0  0.0      0     0 ?        S    авг26   0:00 [pool_workqueue_release]
СтолбецЧто значит
%CPU, %MEMДоля процессора и памяти
RSSСколько памяти процесс реально занимает, КиБ
TTYТерминал; ? — процесс без терминала (служба)
STATR выполняется, S ждёт события, D ждёт диска, Z зомби, T остановлен
COMMANDКоманда; в квадратных скобках — потоки ядра

Найти процесс по имени — pgrep; опция -a покажет командную строку:

$ pgrep -a sshd
640 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
952707 sshd-session: student [priv]
$ ps -u www-data -o pid,rss,cmd       # процессы пользователя, выбранные столбцы
03

Загрузка системы: top, free, uptime

top показывает процессы в реальном времени, отсортированные по нагрузке на процессор. Выход — q, сортировка по памяти — M, по процессору — P.

top - 21:39:29 up 49 days, 12:02,  1 user,  load average: 0,04, 0,04, 0,00
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0,0 us,  4,5 sy,  0,0 ni, 95,5 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
MiB Mem :   3921,8 total,    285,9 free,    601,3 used,   3488,8 buff/cache
MiB Swap:   1722,0 total,   1707,6 free,     14,4 used.   3320,5 avail Mem

Как читать шапку

  • load average — среднее число процессов, которые выполняются или ждут процессора, за 1, 5 и 15 минут. Сравнивайте с числом ядер (nproc): на 2 ядрах значение 2 — полная загрузка, 6 — очередь втрое больше возможностей.
  • wa — доля времени ожидания диска. Высокое значение при низком us — тормозит не процессор, а диск.
  • free мало — это нормально. Linux занимает свободную память под кэш диска (buff/cache) и отдаёт её программам по требованию. Смотрите на avail Mem — сколько можно отдать программам.
  • Swap used растёт постоянно — памяти не хватает, система замедляется.
$ free -h
               total        used        free      shared  buff/cache   available
Mem:           3,8Gi       607Mi       274Mi       171Mi       3,4Gi       3,2Gi
Swap:          1,7Gi        14Mi       1,7Gi

Удобнее top — htop: цветные шкалы по ядрам, прокрутка, поиск F3, дерево F5, сигнал процессу F9. Его устанавливают отдельно: sudo apt install htop (модуль 06).

04

Сигналы и kill

Процессы останавливают сигналами — короткими уведомлениями от ядра. Команда kill посылает сигнал, а не обязательно «убивает».

СигналНомерЧто происходит
TERM15Просьба завершиться. Программа сохраняет данные, закрывает файлы. Посылается по умолчанию
INT2Прерывание — то же, что Ctrl+C
HUP1Многие службы перечитывают по нему конфигурацию
KILL9Ядро уничтожает процесс сразу; программа не успевает ничего сохранить
STOP / CONT19 / 18Приостановить / продолжить
$ sleep 300 &
[1] 952727
$ kill 952727              # TERM по PID
[1]+  Завершено      sleep 300
$ pkill -u anna python    # по имени и пользователю
$ kill -9 12345            # KILL — только если TERM не помог

Правильный порядок: TERM, подождать несколько секунд, проверить, и только потом KILL. Процесс в состоянии D (ожидание диска) не реагирует даже на KILL — причину ищут в дисковой подсистеме. Чужие процессы может останавливать только root.

05

Фоновые задания

Обычно оболочка ждёт, пока команда завершится. Знак & в конце запускает её в фоне — приглашение возвращается сразу.

$ sleep 300 &
[1] 952727                # номер задания и PID
$ jobs
[1]+  Запущен          sleep 300 &
$ fg %1                   # вернуть на передний план
sleep 300
^Z                        # Ctrl+Z — приостановить
[1]+  Остановлен    sleep 300
$ bg %1                   # продолжить в фоне

Фоновые задания принадлежат оболочке: при отключении от сервера они получат сигнал HUP и завершатся. Чтобы долгая команда пережила разрыв связи, её запускают в tmux (окно-сеанс на сервере, к которому можно подключиться снова) или оформляют службой systemd.

06

Службы и systemctl

Служба (демон) — процесс, который работает постоянно без терминала: веб-сервер, SSH, база данных. В Debian службами управляет systemd. Каждая служба описана файлом-юнитом (ssh.service), команда управления — systemctl.

$ systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Wed 2026-08-26 09:37:01 MSK; 1 month 19 days ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 640 (sshd)
      Tasks: 1 (limit: 4638)
     Memory: 14.2M (peak: 36.2M)
     CGroup: /system.slice/ssh.service
             └─640 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Главное в выводе: Loaded … enabled — служба запускается при загрузке; Active: active (running) — работает сейчас. Это два независимых свойства: служба может работать, но не стартовать после перезагрузки, и наоборот.

КомандаДействие
sudo systemctl start nginxЗапустить сейчас
sudo systemctl stop nginxОстановить сейчас
sudo systemctl restart nginxПерезапустить (обрывает соединения)
sudo systemctl reload nginxПеречитать конфигурацию без остановки — если служба умеет
sudo systemctl enable --now nginxВключить автозапуск и сразу запустить
sudo systemctl disable nginxВыключить автозапуск
systemctl is-active sshКоротко: active / inactive / failed
systemctl --failedСписок упавших служб
$ systemctl list-units --type=service --state=running
  UNIT                       LOAD   ACTIVE SUB     DESCRIPTION
  cron.service               loaded active running Regular background program processing daemon
  ssh.service                loaded active running OpenBSD Secure Shell server
  systemd-journald.service   loaded active running Journal Service
  ...
07

Журнал: journalctl

systemd собирает сообщения всех служб и ядра в общий журнал. Когда служба не запускается, причина почти всегда записана там.

$ sudo journalctl -u ssh -n 3           # последние 3 записи службы ssh
окт 14 21:39:28 debian sshd-session[952651]: Accepted password for student from 192.168.116.10 port 53869 ssh2
окт 14 21:39:28 debian sshd-session[952651]: pam_unix(sshd:session): session opened for user student(uid=1000) by student(uid=0)
окт 14 21:39:29 debian sshd-session[952651]: pam_unix(sshd:session): session closed for user student
ОпцияЧто показывает
-u nginxТолько записи службы
-n 50Последние 50 записей
-fСледить за новыми записями, как tail -f
-bС момента последней загрузки; -b -1 — предыдущей
-p errТолько ошибки и важнее
--since "1 hour ago"За последний час; можно дату: --since 2026-10-14
Порядок диагностики упавшей службы: systemctl status имя (последние строки журнала уже там) → journalctl -u имя -n 50 → проверка конфигурации встроенной командой службы, если она есть (nginx -t, sshd -t) → исправление → restart → снова status.

Помимо журнала systemd, многие программы пишут собственные журналы в /var/log/: /var/log/nginx/error.log, /var/log/apt/history.log. Читать их — less, tail -f, искать — grep (модуль 07).

Ключевые выводы модуля

Запомните главное

  • У процесса есть PID, родитель и пользователь; корень дерева — systemd (PID 1)
  • ps aux — все процессы, pgrep -a — поиск по имени, top/htop — в реальном времени
  • load average сравнивают с числом ядер; память оценивают по available, а не по free
  • Сначала kill (TERM), потом, если не помогло, kill -9
  • systemctl: start/stop — сейчас, enable/disable — при загрузке
  • Служба упала — systemctl status и journalctl -u
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Модуль 04: Права Все модули Модуль 06: Пакеты