Home » Изучение запущенных процессов с ps и pstree
Изучение запущенных процессов с ps и pstree

Изучение запущенных процессов с 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 и pstree — не просто старые консольные утилиты, а мощные инструменты для любого, кто хочет держать сервер под контролем. Они позволяют:

  • Быстро находить и устранять “прожорливые” или зависшие процессы.
  • Понимать структуру процессов, видеть, кто кого породил, и где искать источник проблем.
  • Автоматизировать мониторинг и реагирование на сбои.
  • Экономить время на разборе сложных ситуаций, особенно в Docker, на VPS, выделенных и облачных серверах.

Рекомендую сразу после развёртывания любого сервера или контейнера “пощупать” процессы через ps и pstree — это даст понимание, как всё устроено и где искать баги, если что-то пойдёт не так.

Если вы ищете, где всё это попробовать — посмотрите VPS или выделенные серверы — там всё это особенно актуально!

И помните: кто владеет процессами — тот владеет сервером. Удачных экспериментов!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked