- Home »

Изучение запущенных процессов с ps и pstree
О чём эта статья и зачем вообще разбираться с запущенными процессами?
Если вы хоть раз настраивали сервер, запускали Docker-контейнеры или просто пытались понять, почему “железо” греется, а сайт тормозит — вы уже сталкивались с процессами. Процессы — это не абстракция из учебника, а те самые программы и службы, которые прямо сейчас едят вашу оперативку, грузят проц и могут в любой момент устроить весёлую жизнь вашему серверу.
В этой статье — разберёмся, как быстро и эффективно изучать запущенные процессы с помощью ps и pstree. Расскажу, как всё устроено под капотом, как быстро получить нужную инфу, как не запутаться в сотнях строк вывода и не наступить на грабли, на которые наступают новички. Плюс — кейсы, лайфхаки, сравнения, интересные фишки для автоматизации и мониторинга. Всё — простым языком, но без “чайниковских” упрощений. Погнали!
Почему это важно: процессы — сердце любого сервера
- Любая программа на сервере — это процесс. Apache, nginx, Postgres, Docker, даже ssh-сессия — всё это процессы.
- Процессы могут зависать, плодиться, умирать, жрать ресурсы, порождать потомков и даже мутировать (привет, fork()!).
- Если не контролировать процессы — сервер может превратиться в болото, где никто не понимает, что и зачем работает.
- Понимание структуры процессов помогает быстро находить утечки памяти, зависшие демоны, зомби-процессы и прочие баги.
Процессы — это не только про “чисто посмотреть”. Это про управление сервером, оптимизацию, безопасность и автоматизацию. Если вы хотите, чтобы ваш хостинг (будь то VPS, Docker-хост, выделенный сервер или облако) работал стабильно — надо уметь смотреть в кишки системы.
Как это работает: ps и pstree — два взгляда на процессы
ps: снимок процессов здесь и сейчас
ps — это утилита, которая показывает список процессов, работающих в системе. Она делает “фотографию” (snapshot) текущего состояния процессов, не обновляя её в реальном времени.
Что умеет ps:
- Показывать все процессы, принадлежащие вам, другим пользователям или системе.
- Фильтровать, сортировать, выводить кучу информации (PID, CPU, память, время запуска и т.д.).
- Работает практически везде: Linux, BSD, macOS, даже на некоторых встраиваемых системах.
pstree: дерево процессов — кто кого породил
pstree — это утилита, которая рисует дерево процессов: видно, какой процесс чей родитель, кто кого породил и как всё связано.
- Очень удобно для понимания структуры: например, кто породил ваш nginx, сколько воркеров у него сейчас, как выглядит цепочка потомков у Docker-контейнера.
- Визуально понятно, где зомби, где зависшие процессы, где что-то пошло не так.
Как быстро и просто всё настроить: практические советы
Установка и запуск
Обычно ps
есть в любой системе “из коробки”. pstree
может потребоваться доустановить:
# Debian/Ubuntu
sudo apt update && sudo apt install psmisc
# CentOS/RHEL
sudo yum install psmisc
# macOS (через brew)
brew install pstree
Основные команды ps
# Посмотреть все процессы в системе (аналог top, но разово)
ps aux
# Посмотреть только свои процессы
ps u
# Посмотреть процессы по пользователю
ps -u username
# Фильтровать по имени процесса (например, nginx)
ps aux | grep nginx
# Показать дерево процессов (только ps)
ps -ejH
Основные команды pstree
# Просто дерево процессов (по умолчанию)
pstree
# Дерево с PID-ами
pstree -p
# Дерево для конкретного пользователя
pstree username
# Дерево для конкретного процесса (по PID)
pstree 1234
Фишки и быстрые решения
- С помощью
ps aux --sort=-%mem | head
можно быстро увидеть, кто больше всего жрёт память. - Используйте
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
для поиска самых “прожорливых” процессов по CPU. - Для поиска зомби-процессов:
ps aux | awk '$8 ~ /Z/ { print }'
- В скриптах удобно парсить вывод
ps
черезawk
илиgrep
для автоматизации мониторинга.
Кейсы: как это работает на практике
Ситуация | Решение через ps/pstree | Комментарий |
---|---|---|
Сервер начал тормозить, нагрузка на CPU | ps aux --sort=-%cpu | head |
Моментально видно виновника: можно убить процесс или перезапустить сервис |
В Docker-контейнере что-то зависло | pstree -p внутри контейнера |
Видно, кто породил зависший процесс, можно понять, где проблема |
Зомби-процессы после падения приложения | ps aux | awk '$8 ~ /Z/ { print }' |
Быстро найти и убить зомби, чтобы не забивали таблицу процессов |
Проверить, сколько воркеров у nginx | pstree -p | grep nginx |
Визуально видно структуру master/worker |
Ошибки новичков и мифы
- Миф: ps показывает процессы в реальном времени.
Факт: ps делает снимок состояния на момент вызова. Для realtime нуженtop
илиhtop
. - Ошибка: Использовать только
ps aux | grep ...
для поиска процессов.
Лучше: Использовать фильтрацию по PID, PPID и другим полям, а не только по имени (можно зацепить лишнее). - Миф: pstree бесполезен на больших системах.
Факт: pstree отлично помогает искать “разросшиеся” цепочки процессов, даже если их тысячи. - Ошибка: Не смотреть на PPID.
Рекомендация: PPID (Parent PID) — ключ к пониманию, кто кого породил и где искать источник проблемы.
Похожие решения и альтернативы
- top/htop — для мониторинга в реальном времени, но не так удобны для поиска структур процессов.
- pgrep/pkill — для поиска и убийства процессов по имени/паттерну, но не показывают структуру.
- systemctl status — для сервисов systemd, но не для всех процессов.
- lsof — показывает, какие файлы открыты у процессов, удобно для поиска “зависших” файловых дескрипторов.
Статистика и сравнение с другими инструментами
Инструмент | Время реакции | Показывает дерево | Можно фильтровать | Удобен для скриптов |
---|---|---|---|---|
ps | Мгновенно | Частично (-ejH ) |
Да | Да |
pstree | Мгновенно | Да (наглядно) | Нет (только по пользователю/PID) | Ограниченно |
top/htop | Реальное время | Нет | Да | Ограниченно |
Интересные факты и нестандартные способы использования
- Можно использовать
ps
для поиска процессов, запущенных из подозрительных директорий — классика для поиска “залётных” майнеров и шеллов. - pstree помогает ловить “утечки процессов” — например, когда скрипт в кроне случайно порождает сотни потомков.
- ps можно использовать для сбора статистики и построения графиков загрузки процессов (например, через
cron
+awk
+rrdtool
). - pstree — удобный инструмент для обучения: наглядно показывает, как работает fork/exec в Unix-подобных системах.
Автоматизация и скрипты: новые возможности
- С помощью
ps
можно строить свои мониторинги: например, отправлять алерты в Telegram, если какой-то процесс начал жрать слишком много памяти. - В связке с
awk
,grep
иcron
— можно реализовать примитивный watchdog для критичных сервисов. - pstree помогает в автоматизации деплоя: можно проверять, что после запуска сервиса появились нужные дочерние процессы (например, у Apache или Gunicorn).
- В Docker-контейнерах
ps
иpstree
помогают быстро понять, что реально запущено внутри контейнера (особенно, если контейнер “толстый”).
Официальные ссылки и документация
- ps (man): https://man7.org/linux/man-pages/man1/ps.1.html
- pstree (man): https://man7.org/linux/man-pages/man1/pstree.1.html
- psmisc (включает pstree): https://gitlab.com/psmisc/psmisc
Выводы и рекомендации
ps и pstree — не просто старые консольные утилиты, а мощные инструменты для любого, кто хочет держать сервер под контролем. Они позволяют:
- Быстро находить и устранять “прожорливые” или зависшие процессы.
- Понимать структуру процессов, видеть, кто кого породил, и где искать источник проблем.
- Автоматизировать мониторинг и реагирование на сбои.
- Экономить время на разборе сложных ситуаций, особенно в Docker, на VPS, выделенных и облачных серверах.
Рекомендую сразу после развёртывания любого сервера или контейнера “пощупать” процессы через ps и pstree — это даст понимание, как всё устроено и где искать баги, если что-то пойдёт не так.
Если вы ищете, где всё это попробовать — посмотрите VPS или выделенные серверы — там всё это особенно актуально!
И помните: кто владеет процессами — тот владеет сервером. Удачных экспериментов!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.