Linux: процессы, сигналы и службы systemd

Просмотр и управление процессами, фоновые задачи, сигналы и управление службами через systemctl

Просмотр процессов

КомандаВариантЧто делает
ps auxps auxВсе процессы с пользователем, CPU, памятью и командой (формат BSD).
ps -efps -efВсе процессы в формате System V, с PPID.
ps -ups -u ivanПроцессы конкретного пользователя.
ps -pps -fp 4312Информация о процессе по PID.
ps --forestps -ef --forestДерево родителей и потомков.
ps --sortps aux --sort=-%mem | headСортировка по памяти (минус — по убыванию).
ps -ops -eo pid,ppid,user,%cpu,%mem,cmdВыбрать свои колонки.
pstreepstree -p 1Дерево процессов с PID.
toptop -u ivanИнтерактивный монитор, фильтр по пользователю.
top keysP (CPU), M (память), k (kill), q (выход)Клавиши в top.
htophtop -p 4312Удобный монитор с деревом (нужен пакет htop).
pgreppgrep -a nginxPID процессов по имени, с командой.
pgrep -fpgrep -f "gunicorn.*app:main"Поиск по полной командной строке.
pgrep -upgrep -u ivan pythonПроцессы пользователя с именем python.
pidofpidof sshdPID по точному имени программы.
lsof -plsof -p 4312Открытые файлы и сокеты процесса.
strace -pstrace -p 4312 -e trace=networkСистемные вызовы процесса (диагностика).
/proc/PIDcat /proc/4312/statusСведения ядра о процессе: состояние, память, потоки.

Сигналы: kill, pkill, killall

КомандаВариантЧто делает
kill -lkill -lСписок всех сигналов.
killkill 4312Отправить SIGTERM (мягкое завершение, по умолчанию).
kill -HUPkill -HUP 4312Перечитать конфигурацию (так работают многие демоны).
kill -INTkill -INT 4312Как Ctrl+C.
kill -STOP / -CONTkill -STOP 4312 ; kill -CONT 4312Приостановить и продолжить процесс.
kill -KILLkill -9 4312Принудительно, процесс не может его перехватить. Крайняя мера.
kill -0kill -0 4312 && echo runningПроверка, что процесс существует, без отправки сигнала.
kill -USR1kill -USR1 4312Пользовательский сигнал (например, для смены уровня логов).
pkillpkill -f "old-worker"Завершить по имени или шаблону командной строки.
pkill -upkill -KILL -u ivanЗавершить все процессы пользователя.
killallkillall -HUP nginxОтправить сигнал всем процессам с именем (пакет psmisc).
timeouttimeout -k 5 30 long_commandЗавершить команду через 30 секунд, при зависании — через 5 секунд дополнительно.

Приоритеты, фон и задания

КомандаВариантЧто делает
nicenice -n 10 ./batch.shЗапустить с пониженным приоритетом (от -20 до 19).
renicerenice -n 5 -p 4312Изменить приоритет работающего процесса.
ioniceionice -c3 -p 4312Класс дискового ввода-вывода: 3 — только когда диск свободен.
&./job.sh &Запустить в фоне.
jobsjobs -lСписок фоновых задач текущей оболочки.
fg / bgfg %1 ; bg %1Вернуть задачу на передний план или продолжить в фоне.
Ctrl+ZCtrl+ZПриостановить текущую задачу.
disowndisown -h %1Отвязать задачу от оболочки, чтобы она не получала SIGHUP при закрытии.
nohupnohup ./job.sh > job.log 2>&1 &Переживает закрытие сессии, вывод в файл.
waitwait $pidВ скрипте дождаться завершения фоновой задачи.
sleepsleep 1.5Пауза, в секундах (можно с суффиксами s, m, h).

systemctl: службы

КомандаВариантЧто делает
systemctl statussystemctl status nginxСостояние, PID, последние записи журнала.
systemctl startsystemctl start nginxЗапустить службу.
systemctl stopsystemctl stop nginxОстановить.
systemctl restartsystemctl restart nginxПерезапустить (с остановкой).
systemctl reloadsystemctl reload nginxПеречитать конфигурацию без остановки (если служба поддерживает).
reload-or-restartsystemctl reload-or-restart nginxПеречитать, а если не поддерживается, перезапустить.
enablesystemctl enable nginxАвтозапуск при загрузке.
enable --nowsystemctl enable --now nginxВключить автозапуск и сразу запустить.
disable --nowsystemctl disable --now nginxВыключить автозапуск и сразу остановить.
is-activesystemctl is-active nginxКороткий ответ active/inactive (удобно в скриптах).
is-enabledsystemctl is-enabled nginxВключена ли автозагрузка.
is-failedsystemctl is-failed nginxУпала ли служба.
list-unitssystemctl list-units --type=service --state=runningЗапущенные службы.
--failedsystemctl --failedВсе упавшие службы — хорошая первая проверка.
list-unit-filessystemctl list-unit-files --type=serviceВсе установленные службы и их состояние автозапуска.
daemon-reloadsystemctl daemon-reloadПеречитать unit-файлы после изменения.
catsystemctl cat nginxПоказать unit-файл, включая переопределения.
editsystemctl edit nginxСоздать override.conf без правки оригинала.
edit --fullsystemctl edit --full nginxПолная копия unit-файла для редактирования.
mask / unmasksystemctl mask bluetoothПолностью запретить запуск, даже вручную.
showsystemctl show -p MainPID,ActiveState nginxСвойства службы в виде ключ=значение.
list-timerssystemctl list-timers --allРасписание systemd-таймеров (аналог cron).
rebootsystemctl rebootПерезагрузка.
poweroffsystemctl poweroffВыключение.
systemd-analyzesystemd-analyze blame | headКакие службы медленнее всего стартуют.

journalctl: журнал

КомандаВариантЧто делает
journalctl -ujournalctl -u nginxЖурнал одной службы.
journalctl -fjournalctl -u nginx -fСледить за новыми записями.
journalctl -njournalctl -u nginx -n 100 --no-pagerПоследние 100 записей без постраничного вывода.
journalctl --sincejournalctl --since "2026-10-17 09:00" --until "10:00"Интервал времени.
journalctl --sincejournalctl --since "1 hour ago"Относительное время.
journalctl -pjournalctl -p err -bТолько ошибки (уровни: emerg, alert, crit, err, warning, notice, info, debug).
journalctl -kjournalctl -kСообщения ядра (как dmesg).
journalctl -bjournalctl -b -1Журнал предыдущей загрузки (полезно после падения).
journalctl -ojournalctl -u app -o json-pretty -n 1Формат вывода: short, verbose, json, cat и др.
journalctl --disk-usagejournalctl --disk-usageСколько места занимает журнал.
--vacuum-timesudo journalctl --vacuum-time=7dУдалить записи старше 7 дней.
--vacuum-sizesudo journalctl --vacuum-size=500MОграничить размер журнала.

Типовые сценарии

# Служба упала: что случилось и когда
systemctl status app --no-pager -l
journalctl -u app --since "30 min ago" --no-pager

# Перезапуск службы после правки конфига с проверкой
nginx -t && systemctl reload nginx

# Найти самый прожорливый процесс по памяти
ps -eo pid,user,%mem,cmd --sort=-%mem | head -5

# Аккуратно остановить зависший процесс: сначала мягко, потом жёстко
kill 4312 ; sleep 5 ; kill -0 4312 2>/dev/null && kill -9 4312
kill -9 и systemctl mask — мощные инструменты. Принудительное завершение не даёт программе сохранить данные и удалить временные файлы. Перед mask убедитесь, что служба не нужна другим зависимостям.
Перед ручным запуском службы сверьтесь с её unit-файлом через systemctl cat. Так вы увидите рабочую папку, переменные окружения и пользователя, от имени которого она работает.