← Назад к вопросам

Что такое утилита ps?

1.3 Junior🔥 121 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Утилита ps: Основной инструмент для анализа процессов в Linux

ps (Process Status) — это одна из фундаментальных и наиболее часто используемых утилит в Linux и Unix-системах для получения информации о текущих процессах. Она предоставляет моментальный снимок активных процессов в системе, показывая их идентификаторы (PID), состояние, использование ресурсов и многое другое. Как DevOps Engineer, я использую ps ежедневно для мониторинга, диагностики проблем и управления состоянием серверов.

Основное назначение и ключевые возможности

Основная задача psотображение списка процессов. Но её реальная мощь заключается в детализации и фильтрации этой информации. Утилита поддерживает множество флагов и форматов вывода.

  • Определение владельца и иерархии процессов: Позволяет увидеть, какой пользователь (USER) запустил процесс, и его связь с другими процессами (родительский PID - PPID).
  • Анализ состояния процесса: Показывает, находится процесс в состоянии выполнения (R), сна (S), ожидания (D) или остановлен (T).
  • Мониторинг ресурсов: С помощью определенных опций можно получить данные об использовании памяти (%MEM), процессорного времени (%CPU, TIME), а также о занимаемой виртуальной (VSZ) и резидентной (RSS) памяти.
  • Получение полной команды запуска: Критично для понимания, как именно был запущен сервис или приложение.

Форматы вывода и синтаксис

У ps есть два основных стиля синтаксиса: традиционный Unix (с одним дефисом, например ps -e) и BSD (без дефиса, например ps aux). В современном использовании чаще встречается BSD-стиль из-за его удобства.

Базовые и самые полезные команды:

# Показать все процессы текущего пользователя в простом формате
ps

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

# Показать процессы в формате дерева, отображая родительско-детские связи
ps -ef --forest

# Отфильтровать процессы по имени пользователя
ps -u username

# Показать процессы, связанные с конкретной группой процессов (например, сессии терминала)
ps -s <session_id>

# Получить максимально подробную информацию о всех процессах
ps -ef

Пример анализа вывода ps aux

Рассмотрим одну строку из вывода ps aux:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1234  0.5  2.1  245768 21500 ?       Ss   Jan01   10:25 /usr/bin/python3 /app/server.py
  • USER: root — процесс принадлежит суперпользователю.
  • PID: 1234 — уникальный идентификатор процесса.
  • %CPU / %MEM: 0.5% и 2.1% — текущая нагрузка на CPU и память.
  • VSZ / RSS: 245768 KB и 21500 KB — виртуальный и резидентный размер памяти.
  • TTY: ? — процесс не связан с терминалом (например, демон).
  • STAT: Ss — состояние: "S" (интерruptible sleep) и "s" (лидер сессии).
  • TIME: 10:25 — общее процессорное время, использованное процессом.
  • COMMAND: /usr/bin/python3 /app/server.py — полная команда запуска. Это крайне важно для идентификации.

Практическое применение в DevOps

В работе DevOps ps является первым инструментом при многих операциях:

  1. Диагностика высокой нагрузки: Комбинация ps aux | sort -nk 3 позволяет быстро найти процессы, потребляющие максимум CPU (%CPU в 3-й колонке).
  2. Поиск "зомби" (Z) или "потерянных" процессов: Они занимают место в таблице процессов, но не выполняют полезной работы.
  3. Определение PID для управления: Чтобы остановить (kill), послать сигнал или изменить приоритет (nice) процесса, сначала нужно узнать его PID.
  4. Аудит безопасности и соответствия: Проверка, какие процессы запущены от каких пользователей, и соответствие их ожидаемой картине.
  5. Интеграция в скрипты автоматизации: ps часто используется в скриптах для проверки наличия процесса перед запуском действия (например, рестарта службы).
# Пример скрипта для проверки, работает ли наш веб-сервер Nginx
if ps aux | grep -v grep | grep nginx > /dev/null; then
    echo "Nginx process is running."
else
    echo "Nginx is down! Starting..."
    systemctl start nginx
fi

Важно помнить, что ps показывает статичный снимок. Для динамического наблюдения за изменением состояния процессов используется её "родственник" — утилита top (или её более современные варианты, такие как htop). Однако ps незаменима для получения структурированной, фильтрованной информации, которую можно легко передать другим командам (например, grep, awk, kill). Это делает её одним из самых важных инструментов в арсенале любого системного администратора или DevOps специалиста.