Что сейчас работает на машине, как это остановить и запустить снова
ps и topsystemctl и искать причины сбоев в journalctlПроцесс — запущенная программа: код, память, открытые файлы и пользователь, от имени которого она работает. Одна программа может быть запущена много раз — это разные процессы. У каждого есть номер 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) на каждое подключение порождает дочерний процесс, тот — оболочку пользователя, а оболочка — каждую набранную команду. Когда команда завершается, процесс исчезает, а родитель получает код завершения.
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 | Терминал; ? — процесс без терминала (служба) |
STAT | R выполняется, 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 # процессы пользователя, выбранные столбцы
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
nproc): на 2 ядрах значение 2 — полная загрузка, 6 — очередь втрое больше возможностей.us — тормозит не процессор, а диск.buff/cache) и отдаёт её программам по требованию. Смотрите на avail Mem — сколько можно отдать программам.$ 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).
Процессы останавливают сигналами — короткими уведомлениями от ядра. Команда kill посылает сигнал, а не обязательно «убивает».
| Сигнал | Номер | Что происходит |
|---|---|---|
TERM | 15 | Просьба завершиться. Программа сохраняет данные, закрывает файлы. Посылается по умолчанию |
INT | 2 | Прерывание — то же, что Ctrl+C |
HUP | 1 | Многие службы перечитывают по нему конфигурацию |
KILL | 9 | Ядро уничтожает процесс сразу; программа не успевает ничего сохранить |
STOP / CONT | 19 / 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.
Обычно оболочка ждёт, пока команда завершится. Знак & в конце запускает её в фоне — приглашение возвращается сразу.
$ sleep 300 &
[1] 952727 # номер задания и PID
$ jobs
[1]+ Запущен sleep 300 &
$ fg %1 # вернуть на передний план
sleep 300
^Z # Ctrl+Z — приостановить
[1]+ Остановлен sleep 300
$ bg %1 # продолжить в фоне
Фоновые задания принадлежат оболочке: при отключении от сервера они получат сигнал HUP и завершатся. Чтобы долгая команда пережила разрыв связи, её запускают в tmux (окно-сеанс на сервере, к которому можно подключиться снова) или оформляют службой systemd.
Служба (демон) — процесс, который работает постоянно без терминала: веб-сервер, 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
...
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).
systemd (PID 1)ps aux — все процессы, pgrep -a — поиск по имени, top/htop — в реальном времениavailable, а не по freekill (TERM), потом, если не помогло, kill -9systemctl: start/stop — сейчас, enable/disable — при загрузкеsystemctl status и journalctl -u