Linux

Управление процессами в Linux: от базовых команд до systemd

Этот гайд научит вас находить, анализировать и управлять процессами в Linux с помощью командной строки. Вы освоите как базовые утилиты (ps, top, kill), так и современный менеджер systemd, что позволит вам контролировать работу системы и решать связанные проблемы.

Обновлено 14 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04+Debian 11+CentOS Stream/RHEL 8+Linux с systemd

Введение: зачем управлять процессами?

Каждая запущенная программа в Linux — это процесс. Управление ими — одна из ключевых задач системного администратора и разработчика. Нужно ли вам:

  • Найти и завершить "зависший" процесс, который съедает всю память?
  • Узнать, какой именно процесс слушает сетевой порт?
  • Запустить задачу в фоне, чтобы закрыть терминал?
  • Настроить автозапуск важного сервиса?

Этот гайд покрывает всё — от базовых команд ps и kill до современного менеджера системных сервисов systemd. Вы получите практические навыки, которые пригодятся ежедневно.

Базовый мониторинг: ps, top и htop

Команда ps — снимок процессов

ps (process status) показывает статический список процессов на момент запуска команды.

Самые полезные варианты:

# Показать все процессы всех пользователей в "полном" формате (BSD-стиль)
ps aux

Ключевые столбцы:

  • USER — владелец процесса.
  • PID — уникальный идентификатор процесса (главное, что нужно для управления).
  • %CPU, %MEM — потребление процессорного времени и памяти.
  • COMMAND — команда, запустившая процесс.
# Альтернативный, более детальный формат (POSIX-стиль)
ps -ef

Здесь столбцы: UID, PID, PPID (PID родителя), C (коэффициент использования CPU), STIME (время запуска), CMD.

Фильтрация: Всегда комбинируйте ps с grep для поиска.

ps aux | grep nginx
ps -ef | grep python3

⚠️ Важно: grep сам появится в выводе. Используйте pgrep для чистого поиска по имени: pgrep -l nginx.

top и htop — интерактивный мониторинг

top — классическая утилита, которая обновляет список процессов в реальном времени (по умолчанию каждые 3 секунды).

Основные клавиши в top:

  • P — сортировка по загрузке CPU (по умолчанию).
  • M — сортировка по использованию памяти.
  • N — сортировка по PID.
  • k — убить процесс (запросит PID и сигнал).
  • r — изменить приоритет (renice) процесса.
  • u — показать процессы только указанного пользователя.
  • q — выйти.

htop — более удобная и наглядная цветовая альтернатива top. Она часто не установлена по умолчанию, но её стоит установить (sudo apt install htop / sudo yum install htop). Позволяет управлять процессами прямо из интерфейса (F9 для kill, F5 для дерева, F6 для сортировки).

Поиск процессов: не только по имени

Иногда нужно найти процесс не по его имени, а по другим признакам.

По открытому порту или сокету

Частая задача: "Кто слушает порт 80?".

# Рекомендуемый современный способ (из пакета iproute2)
sudo ss -tulpn | grep :80

Опции: -t (TCP), -u (UDP), -l (только слушающие), -p (показать процесс/программу).

# Классический способ (из пакета net-tools)
sudo lsof -i :80

lsof (list open files) показывает все открытые файлы, включая сетевые сокеты. Очень мощный инструмент.

По файлу или каталогу

Какой процесс держит открытым файл /var/log/app.log и мешает его удалить?

sudo lsof /var/log/app.log

По дереву процессов

Чтобы увидеть иерархию (родительские и дочерние процессы), используйте:

pstree -p

Или в htop нажмите F5.

Завершение процессов: kill, killall, pkill

Сигналы: язык общения с процессами

Завершение — это не просто "выстрел". Это отправка сигнала — короткого сообщения процессу. Основные:

СигналНомерДействие (по умолчанию)Как использовать
SIGTERM15Вежливое завершение. Процесс может обработать сигнал, сохранить состояние и корректно закрыться.kill <PID> (этот сигнал отправляется по умолч.)
SIGKILL9Немедленное принудительное завершение. Обработчик сигнала игнорируется. Процесс не может сохранить данные.kill -9 <PID> или kill -KILL <PID>
SIGINT2Прерывание (как Ctrl+C в терминале).kill -2 <PID>
SIGHUP1"Перезагрузка". Часто используется для перечитывания конфигурационных файлов без полного перезапуска.kill -HUP <PID>

Правило: Сначала пробуйте SIGTERM (просто kill). Если процесс не реагирует (виснет), используйте SIGKILL.

Инструменты

  • kill <PID> — отправить SIGTERM конкретному PID.
  • kill -s SIGNAL <PID> или kill -SIGNAL <PID> — отправить конкретный сигнал. Пример: kill -HUP 1234.
  • killall <имя_процесса> — завершить все процессы с указанным именем. killall nginx. Осторожно! Убедитесь, что убиваете то, что нужно.
  • pkill <паттерн> — завершить процессы, соответствующие шаблону (по имени, пользователю и т.д.). pkill -f "python3 script.py" (ищет в полной командной строке). Мощный, но требует аккуратности.
  • pgrep <паттерн>только найти PID по шаблону. Идеально для комбинации: kill $(pgrep -f "python3 script.py").

Управление приоритетами: nice и renice

Linux планировщик распределяет время CPU между процессами. Приоритет можно влиять.

  • nice — запускает процесс с заданным статическим приоритетом.
    • Диапазон: от -20 (наивысший приоритет, требует sudo) до +19 (наинизший).
    • Пример запуска с низким приоритетом (чтобы не мешал другим задачам):
      nice -n 19 ./долгая_расчётная_задача.sh
      
    • Если не указать -n, по умолчанию используется +10.
  • renice — меняет приоритет уже запущенного процесса.
    # Повысить приоритет (уменьшить значение nice) для PID 5678
    sudo renice -5 -p 5678
    

💡 Совет: Не повышайте (nice < 0) приоритет важных системных процессов без необходимости. Это может привести к "голоданию" других задач.

Фоновые процессы и управление заданиями

Простое фоновое выполнение

Добавьте & в конец команды:

long_running_command &
[1] 2345  # [1] - номер задания, 2345 - PID

Команда вернёт управление терминалу сразу.

Управление заданиями (job control)

  • jobs — показать список фоновых заданий текущей оболочки.
  • fg %1 — вернуть задание №1 на передний план (foreground).
  • bg %1 — возобновить остановленное задание №1 в фоне (background).
  • Ctrl+Z — приостановить (stop) текущий foreground-процесс (не завершает!).

Независимость от терминала: nohup и disown

По умолчанию фоновый процесс (&) всё равно "привязан" к терминалу. Если терминал закроется (например, разорвётся SSH-соединение), процесс получит сигнал SIGHUP и, скорее всего, завершится.

  • nohup (no hang up) — запускает процесс, игнорирующий сигнал SIGHUP.
    nohup ./my_server.py > server.log 2>&1 &
    
    Вывод перенаправляется в файл server.log.
  • disown — после запуска процесса в фоне (command &) можно "отсоединить" его от текущей оболочки: disown %1. После этого процесс не будет получать SIGHUP при закрытии терминала.

Современный подход: systemd и systemctl

Для долгоживущих системных сервисов (веб-серверы, базы данных, демоны) в современных дистрибутивах (Ubuntu 15.04+, CentOS 7+, Debian 8+) используется systemd.

Основные команды systemctl

# Статус сервиса (запущен ли, PID, последние логи)
sudo systemctl status nginx

# Запуск/остановка/перезапуск
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx   # мягкий перезапуск (может отключить на мгновение)
sudo systemctl reload nginx    # перечитать конфиг без остановки (если поддерживает)

# Включение/отключение автозапуска при загрузке системы
sudo systemctl enable nginx
sudo systemctl disable nginx

# Просмотр всех юнитов (сервисов, таймеров, сокетов)
systemctl list-units --type=service --all

# Просмотр логов сервиса (аналог journalctl)
sudo journalctl -u nginx -f  # -f — следить в реальном времени

Создание собственного сервиса

  1. Создайте файл конфигурации: sudo nano /etc/systemd/system/myapp.service
  2. Базовый шаблон:
    [Unit]
    Description=Мой кастомный сервис
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/python3 /opt/myapp/main.py
    Restart=on-failure
    User=appuser
    WorkingDirectory=/opt/myapp
    
    [Install]
    WantedBy=multi-user.target
    
  3. Активируйте: sudo systemctl daemon-reload && sudo systemctl enable --now myapp.service.

Продвинутый мониторинг и анализ

strace — трассировка системных вызовов

Если нужно понять, что именно делает "зависший" процесс, используйте strace. Он показывает все взаимодействия процесса с ядром (чтение/запись файлов, сетевые запросы и т.д.).

# Трассировать уже запущенный процесс
sudo strace -p <PID> -o trace.log

# Запустить команду под strace
sudo strace -o trace.log ./my_program

Используйте -c для статистики по системным вызовам, -f для следования за дочерними процессами.

lsof — "что открыто?"

Уже упоминалась, но стоит выделить отдельно. Это швейцарский нож для анализа.

# Все открытые файлы для конкретного PID
sudo lsof -p <PID>

# Все сетевые соединения (аналог netstat)
sudo lsof -i

# Кто держит каталог /mnt/backup (например, для unmount)
sudo lsof +D /mnt/backup

vmstat и iostat — общая нагрузка на систему

Чтобы понять, проблема в процессе или в системе в целом:

# Процессы, память, своп, I/O, CPU (обновляется каждые 2 сек)
vmstat 2

# Статистика по дисковому вводу-выводу
iostat -xz 2

Если vmstat показывает высокий wa (I/O wait) — проблема в дисках. Если высокий us/sy (user/system CPU) — проблема в процессах.

Заключение и лучшие практики

  1. Начинайте с ps aux или top/htop для общего обзора.
  2. Используйте grep/pgrep/pkill для поиска, но проверяйте вывод перед killall.
  3. Отправляйте SIGTERM (kill) в первую очередь, SIGKILL (-9) — только в крайнем случае.
  4. Для сервисов используйте systemctl, а не ручной запуск через &. Это даст автоматический перезапуск, логирование и управление.
  5. nohup и disown — ваши друзья для долгих задач в нестабильном SSH-сессии.
  6. strace и lsof — мощные отладочные инструменты для глубокого анализа.
  7. Права: Для управления чужими процессами (особенно через kill или renice) часто нужны права sudo.

Управление процессами — это навык, который оттачивается практикой. Экспериментируйте в тестовой среде, создавайте "игрушечные" зависшие процессы (sleep 1000 &) и отрабатывайте на них команды.

Часто задаваемые вопросы

В чём разница между командами kill и killall?
Как найти PID процесса, который слушает определённый порт (например, 8080)?
Почему команда top не показывает все мои процессы?
Что такое zombie-процесс и как от него избавиться?

Полезное

Просмотр списка активных процессов
Поиск конкретного процесса
Завершение (убийство) процесса
Изменение приоритета процесса
Запуск процесса в фоне и управление им
Управление сервисами через systemd