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

Быстрые ссылки
- Процессы и Linux
- Команда top: динамическая панель системы
- Команда htop: альтернативная панель
- Команда ps: вывод процессов в терминале
- Команда pstree: дерево процессов
- Команда kill: завершение по PID
- Команда pgrep: поиск по имени
- Команды pkill и killall: массовое завершение
- Команда renice: приоритеты CPU
- Команда xkill: только для X (GNOME)
- Набор проверенных практик
Важное: перед завершением процесса обязательно убедитесь, что он не является критическим для системы. Ошибка может привести к потере данных или необходимости перезагрузки.
Процессы и Linux
Процесс — это выполняющаяся программа или её часть в памяти. Ядро Linux создаёт первый процесс пользовательского пространства (обычно systemd) при загрузке. Каждому процессу соответствует уникальный идентификатор PID. PID 1 обычно занят systemd (или другим init-процессом) и является предком большинства процессов.
Краткие определения:
- PID: идентификатор процесса.
- Parent/Child: родительский процесс и его потомки.
- Nice value: приоритет планировщика CPU (ниже значение = выше приоритет).
Если процесс завис или ведёт себя неправильно, его можно диагностировать и при необходимости завершить. Для этого Linux предоставляет несколько утилит, подходящих для разных сценариев: интерактивный монитор, вывод в терминал, древовидный просмотр и инструменты поиска по имени.
Факты и диапазоны:
- Значения nice: от -19 до 20 (по умолчанию 0).
- Сигнал SIGKILL (9) немедленно завершает процесс, SIGTERM (15) предлагает корректное завершение.
Команда top — динамическая панель системы
Команда top показывает постоянно обновляемый список процессов и статистику по ним: использование CPU, памяти, время выполнения и т.д. Каждая строка — отдельный процесс, столбцы сортируются по значению.

Полезные сочетания клавиш в top:
- Ctrl+Shift+M — сортировать по колонке %MEM (память).
- Shift+P — сортировать по колонке %CPU (процессор).
- Нажать дважды на сортируемую колонку — поменять порядок сортировки.
- k — запрос на завершение процесса по PID (введите PID и сигнал).
Пример: чтобы отправить SIGKILL (9), введите k, затем PID, затем 9.
Советы по использованию top:
- Используйте top для быстрого обнаружения «тяжёлых» процессов.
- Для долговременного мониторинга лучше настроить сбор логов или использовать htop/атрибуты grafana/prometheus.
Команда htop — более удобный интерактивный монитор
htop — это более дружелюбная версия top с наглядной цветовой схемой и настраиваемыми панелями. Столбцы и графики легко настраиваются, а навигация с помощью клавиш и мыши более интуитивна.

Как завершить процесс в htop:
- Выделите процесс стрелками или мышью.
- Нажмите k или F9.
- Выберите сигнал (обычно SIGTERM, а затем SIGKILL, если не ответит).
- Нажмите Enter.
Когда использовать htop:
- Интерактивная отладка на рабочей станции.
- Быстрый анализ потребления ресурсов.
- Когда нужна визуальная фильтрация и сортировка.
Команда ps — список процессов в терминале
ps показывает снимок процессов в момент запуска команды. По умолчанию отображаются процессы текущего пользователя. Ключ -e показывает все процессы.
ps
ps -e
Поиск по имени через grep:
ps -e | grep firefox
Использование –forest для древовидного вывода помогает увидеть родительские и дочерние процессы — важно, потому что завершение родителя завершит и детей:
ps -e --forest
Применение:
- Используйте ps для скриптов и одноразовых снимков состояния.
- В сочетании с grep — для быстрого поиска по имени.
Команда pstree — наглядное дерево процессов
pstree рисует компактное дерево процессов, показывая связи родитель-потомок. Повторяющиеся одинаковые процессы отображаются как name-N*[children].
Синтаксис и примеры:
parent-5*[child-processes]
parent-3*[{name-of-parent}]Ключи:
- -p — показать PID рядом с именами процессов.
- -T — скрыть потоки (threads), чтобы уменьшить «шум».
pstree -p
pstree -p -T
pstree -pT 14937


Когда применять pstree:
- Для понимания иерархии процессов и поиска предков/потомков.
- При анализе, какие дочерние процессы будут убиты вместе с родителем.
Команда kill — завершение процесса по PID
kill отправляет выбранный сигнал процессу по PID. Если процесс принадлежит другому пользователю или является системным, потребуется sudo.
Пример:
kill 15197
pstree -pT 14937
Рекомендуемый порядок действий:
- Попробуйте SIGTERM (15) — позволяет процессу аккуратно завершиться и освободить ресурсы.
- Если не помогло — SIGKILL (9) — немедленное уничтожение процесса.
Примечание: SIGKILL нельзя перехватить или обработать.
Команда pgrep — поиск процессов по имени
pgrep возвращает PID-ы процессов, соответствующих шаблону. Это полезно для «сухого» прогона перед применением pkill или kill.
Пример поиска с выводом имён:
pgrep -l fox
pgrep -l fire

Совет: используйте точные шаблоны (регулярные выражения), чтобы не убить лишние процессы.
Команды pkill и killall — массовое завершение
pkill и killall принимают имя процесса и отправляют сигнал всем совпадающим процессам. Разница:
- pkill может работать с частичными шаблонами и регулярными выражениями.
- killall обычно ожидает точное имя процесса.
Пример последовательности:
pgrep -l fire
pkill fire
pgrep -l fire
Осторожно: pkill с общими шаблонами может завершить нежелательные процессы (например, dbus и dbus-daemon).
Команда renice — корректировка приоритета
renice изменяет nice value процесса, влияя на его приоритет при планировании CPU. Диапазон значений: -19 (наивысший приоритет) до 20 (наименьший приоритет). По умолчанию процессы запускаются с nice=0.
Примеры:
pgrep drain
renice 15 18577
Для уменьшения значения nice (улучшения приоритета) требуется sudo:
pgrep drain
renice 0 18577
sudo renice 0 18577
Практика:
- Поднимайте nice для фоновых задач, которые должны ждать.
- Понижайте nice только для критических сервисов и с осторожностью.
Команда xkill — только для X (GNOME)
xkill работает в окружении X (не в Wayland). После запуска курсор изменяется на крестик или другой символ; щелчок по окну завершает процесс графического приложения.

Ограничение: не работает под Wayland. Для Wayland используйте средства окружения рабочего стола или системный монитор.
Набор проверенных практик
Важно иметь методику и сценарии действий. Ниже — практические чек-листы, playbook и руководство по принятия решения.
Playbook: безопасное завершение процесса (шаги)
- Идентификация: используйте ps, pgrep, pstree, top или htop, чтобы найти PID и понять контекст процесса.
- Оценка риска: определить, является ли процесс системным или критичным (когда в сомнении — не убивать).
- Попросить корректного завершения: отправить SIGTERM (kill -15 PID) и подождать 5–10 секунд.
- Повторная проверка: pstree или ps для подтверждения.
- Жёсткое завершение при необходимости: SIGKILL (kill -9 PID).
- После завершения: проверить журналы (journalctl, /var/log), при необходимости перезапустить сервис через systemctl.
Критерии приёмки
- Процесс завершён и не оставляет зомби.
- Системные сервисы работают корректно.
- Нет критической потери данных.
Чек-листы по ролям
Системный администратор:
- Проверил PID и деревья процессов.
- Проверил логи systemd/journalctl.
- Использовал systemctl для перезапуска сервисов, если возможно.
- Зарезервировал план отката (скрипт перезапуска, резервные копии).
Разработчик:
- Собрал дамп состояния процесса, если нужно (gcore, strace).
- Выполнил анализ логов приложения.
- Применил SIGTERM и, при необходимости, SIGKILL.
Служба поддержки / Helpdesk:
- Выполнил pgrep и pskill/kill с уточнением у администратора.
- Вёл запись шагов и времени действия.
- Сообщил пользователю об ожидаемых последствиях.
Шаблон быстрого контроля (cheat sheet)
| Задача | Команда |
|---|---|
| Показать все процессы | ps -e |
| Найти процесс по имени | pgrep -l <имя> |
| Древо процессов | pstree -pT |
| Завершить процесс по PID | kill |
| Завершить по имени (шаблон) | pkill <шаблон> |
| Установить nice | renice <значение> |
| Интерактивный монитор | htop / top |
Decision flowchart (Mermaid)
flowchart TD
A[Процесс ведёт себя некорректно?] -->|Нет| Z[Наблюдать]
A -->|Да| B[Идентифицировать PID и контекст]
B --> C{Критичный процесс?}
C -->|Да| D[Связаться с администратором; не убивать]
C -->|Нет| E[Попробовать SIGTERM]
E --> F[Процесс завершился?]
F -->|Да| Z
F -->|Нет| G[Проанализировать логи, попытаться перезапустить сервис]
G --> H[Процесс отвечает?]
H -->|Да| Z
H -->|Нет| I[Отправить SIGKILL и повторить проверку]
I --> ZКогда эти инструменты дают сбой — примеры и альтернативы
Контрпримеры / ограничения:
- Wayland: xkill не работает. Используйте системный монитор DE или kill по PID.
- Процессы в контейнерах: команды на хосте могут не видеть PID-ы внутри контейнера. Используйте docker exec / kubectl exec.
- Zombie-процессы: сигнал SIGKILL не уберёт зомби; требуется, чтобы родитель корректно обработал завершение, или рестарт родителя/системы.
Альтернативные подходы:
- Docker/k8s: управляйте процессами через контейнерные инструменты (docker kill, kubectl delete pod).
- cgroups: ограничьте потребление ресурсов вместо принудительного завершения.
- systemd-run/systemctl: управляйте службами через systemd (systemctl restart), а не через pkill.
Безопасность и приватность
- Не используйте pkill с общими шаблонами в сценариях с sudo без полной уверенности.
- Логи могут содержать личные данные; при анализе соблюдайте внутренние политики безопасности и GDPR, если они применимы.
- Для удалённой работы используйте зашифрованные соединения (SSH) и двухфакторную аутентификацию для аккаунтов с правом sudo.
Тесты и критерии приёмки
Тестовые сценарии для проверки корректного завершения процесса:
- Запустить тестовый процесс, отправить SIGTERM, проверить, что он корректно завершился и освободил файлы.
- Запустить процесс с дочерними процессами, убить родителя, проверить, что дети завершены.
- Попробовать renice на не-своём процессе без sudo — удостовериться, что операция блокируется.
- Проверить xkill в X и убедиться, что идентифицированное окно завершается.
Критерии приёмки:
- Ожидаемое поведение достигнуто без негативного влияния на системные сервисы.
- Процесс не оставил открытых дескрипторов файлов или замороченных состояний.
Советы по отладке перед убийством процесса
- Посмотрите логи: journalctl -u
или /var/log/ . - Используйте strace для отслеживания системных вызовов: strace -p
. - Снимите дамп памяти при необходимости: gcore
(требует места на диске).
Итог
Эти инструменты дают полный набор возможностей для наблюдения, управления и корректного завершения процессов в Linux. Главное — соблюдать осторожность: всегда понимать контекст процесса и потенциальные последствия его завершения. Если сомневаетесь, сначала собирайте данные и консультируйтесь с коллегами.
Краткое резюме действий:
- Найдите PID и иерархию (pgrep/ps/pstree).
- Предложите корректное завершение (SIGTERM), дайте время.
- Применяйте SIGKILL только при необходимости.
- Используйте renice для корректировки приоритетов, а systemctl для управления системными сервисами.
Полезные команды напоследок:
ps -e --forest
pgrep -l <шаблон>
pkill <шаблон>
kill
kill -9
renice 10
htop
pstree -pT
xkill Спасибо за внимание. Будьте аккуратны при управлении процессами — это инструмент, который экономит время, но требует ответственности.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента