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

Какая информация хранится о запущенных процессах?

1.0 Junior🔥 201 комментариев
#Linux и администрирование#Мониторинг и логирование

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

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

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

Информация о запущенных процессах в Linux/Unix-системах

В Linux и Unix-подобных системах информация о запущенных процессах хранится в виртуальной файловой системе /proc (procfs). Каждый запущенный процесс получает свою собственную директорию с именем, соответствующим его PID (Process ID). Например, процесс с PID 12345 будет представлен директорией /proc/12345. Эта директория содержит множество файлов и поддиректорий с детализированной информацией о состоянии процесса.

Ключевые файлы и их содержимое в /proc/[PID]/

  • /proc/[PID]/status: Сводная информация в удобочитаемом формате.
    *   Имя процесса (`Name`), состояние (`State`), PID, PPID (Parent PID), UID/GID реальные и эффективные, использование памяти (`VmSize`, `VmRSS`, `VmData`, `VmStk`).
```bash
# Пример просмотра статуса процесса
cat /proc/self/status | head -20
```
  • /proc/[PID]/stat и /proc/[PID]/statm: Статистика в машинно-читаемом формате.
    *   `stat`: 52 поля с информацией о состоянии, приоритете, использовании CPU и т.д.
    *   `statm`: Использование памяти в страницах (размер, резидентный набор, разделяемые страницы и др.).
```bash
# Просмотр статистики текущего процесса (cat - это процесс)
cat /proc/self/stat
```
  • /proc/[PID]/cmdline: Полная командная строка запуска процесса (аргументы разделены нулевыми символами \0).

    # Для корректного отображения командной строки
    tr '\0' ' ' < /proc/self/cmdline; echo
    
  • /proc/[PID]/exe: Символическая ссылка на исполняемый файл процесса.

    # Узнать путь к исполняемому файлу
    readlink /proc/self/exe
    
  • /proc/[PID]/cwd: Символическая ссылка на текущую рабочую директорию процесса.

  • /proc/[PID]/fd/: Директория, содержащая символические ссылки на файловые дескрипторы, открытые процессом.

    # Посмотреть открытые файлы процессом с PID 12345
    ls -la /proc/12345/fd/
    
  • /proc/[PID]/environ: Переменные окружения процесса.

    # Просмотр окружения (также разделены нулевыми символами)
    tr '\0' '\n' < /proc/self/environ
    
  • /proc/[PID]/io: Статистика ввода-вывода (прочитано/записано байт).

  • /proc/[PID]/limits: Текущие лимиты ресурсов (ulimit).

  • /proc/[PID]/maps и /proc/[PID]/smaps: Карта памяти процесса.

    *   `maps`: Отображения виртуальной памяти (библиотеки, heap, stack и т.д.).
    *   `smaps`: Детальная статистика по каждому отображению (размер резидентного набора, приватные/разделяемые страницы).

Системные утилиты для работы с процессами

Хотя информация извлекается из /proc, на практике чаще используют утилиты-обёртки, которые парсят эти данные и представляют их в удобном виде:

  • ps (Process Status): Базовая утилита для вывода списка процессов с различными форматами.

    # Показать все процессы в формате лес (иерархия)
    ps auxf
    # Показать процессы с детальной информацией о потоках (LWP)
    ps -eLf
    
  • top / htop (интерактивные мониторы): Динамически обновляемый вывод, сортировка по CPU, памяти и другим параметрам. htop — более продвинутая и удобная версия.

  • pgrep / pkill: Поиск и отправка сигналов процессам по имени или другим атрибутам.

    # Найти PID всех процессов с именем "nginx"
    pgrep -f nginx
    
  • pidstat (из пакета sysstat): Расширенная статистика по процессам (CPU, память, I/O, контекстные переключения).

    # Мониторинг использования CPU всеми процессами каждые 2 секунды
    pidstat -u 2
    # Мониторинг использования памяти
    pidstat -r 2
    
  • /proc содержит также системную информацию (не привязанную к PID):

    *   **`/proc/cpuinfo`** — информация о процессоре.
    *   **`/proc/meminfo`** — детальная статистика по памяти системы.
    *   **`/proc/loadavg`** — средняя загрузка системы.
    *   **`/proc/net/`** — сетевая статистика.
    *   **`/proc/sys/`** — настройки ядра (параметры, доступные для изменения через `sysctl`).

Практическое значение для DevOps/SRE

Для инженера по надежности и разработке понимание этой информации критически важно для:

  1. Диагностики проблем (утечки памяти, высокое использование CPU, блокировки на I/O).
  2. Мониторинга и алертинга — сбор метрик из /proc или с помощью утилит (например, через node_exporter для Prometheus).
  3. Анализа производительности — понимание, какие ресурсы потребляет конкретное приложение.
  4. Контейнеризации — контроль групп (cgroups), которые также представлены в /proc/[PID]/cgroup, и изоляция ресурсов основывается на этой информации.

Таким образом, /proc является единым и исчерпывающим источником истины о состоянии процессов и системы в режиме реального времени, а стандартные утилиты (ps, top) — это лишь интерфейсы для удобной работы с этими данными.

Какая информация хранится о запущенных процессах? | PrepBro