Директории и файлы процесса в /proc/[PID]

Nov, 6, 2025

/proc/[PID] — цифровое отражение процесса

Каталог /proc — это виртуальная файловая система procfs, предоставляющая интерфейс ядра к информации о системе и процессах.
Каждый запущенный процесс в Linux представлен директорией /proc/[PID], где PID — это его идентификатор процесса (Process ID).

Эта структура не хранится на диске — она создаётся динамически ядром при запросе.
Фактически, /proc/[PID] — это “живой снимок” состояния процесса.


Обзор структуры

Пример вывода:

ls /proc/193412
arch_status  cmdline  cwd  environ  exe  fd  maps  mem  mounts  net  sched  smaps  stack  stat  status  task  wchan ...

🧩 Основные файлы и директории

  • cmdline - Аргументы командной строки, с которыми был запущен процесс. Аналог ps -eo cmd.
  • exe - Символическая ссылка на исполняемый бинарный файл, из которого запущен процесс.
  • cwd - Символическая ссылка на текущий рабочий каталог (current working directory) процесса.
  • environ - Список переменных окружения, с которыми запущен процесс (printenv, env).
  • fd/ - Директория с файловыми дескрипторами процесса (/proc/[PID]/fd/0 — stdin, 1 — stdout, 2 — stderr).
  • maps - Отображение виртуальной памяти процесса: какие участки памяти заняты библиотеками, стеком, кучей.
  • mem - Образ адресного пространства процесса (нечитаем без root).
  • stat - Основная сводка состояния: PID, PPID, состояние (R/S/D), потребление CPU, память и пр.
  • status - Человекочитаемая версия stat с разделением на поля: UID, GID, VmRSS, Threads, и т.д.
  • sched - Параметры планировщика для процесса (например, policy, prio, se.exec_runtime).
  • task/ - Содержит поддиректории для каждого потока (/proc/[PID]/task/[TID]).
  • mounts - Список смонтированных файловых систем, доступных процессу.
  • io - Статистика ввода-вывода: количество прочитанных/записанных байт, системные вызовы I/O.
  • root - Символическая ссылка на корневую директорию, видимую процессу (может отличаться при chroot).
  • wchan - Показывает “wait channel” — на чём сейчас спит процесс (полезно при отладке зависаний).

⚙️ Файлы, связанные с управлением памятью

  • smaps - Детализированная статистика по каждому сегменту памяти (RSS, PSS, Shared, Private).
  • smaps_rollup - Сводная версия smaps — итоги по всему процессу.
  • numa_maps - Отображение памяти по NUMA-узлам (на системах с многопроцессорной архитектурой).
  • clear_refs - Позволяет сбрасывать флаги доступа к страницам памяти (используется профилировщиками).
  • pagemap - Бинарная карта соответствия виртуальных страниц физическим (для анализа памяти).

🧠 Безопасность и контроль прав

  • uid_map / gid_map - Отображение идентификаторов пользователей/групп внутри namespace.
  • setgroups - Разрешает или запрещает вызов setgroups() в user namespace.
  • cgroup - Показывает принадлежность процесса к контрольной группе (cgroup).
  • loginuid / sessionid - Сессия и идентификатор входа для аудита (используется auditd).
  • oom_adj / oom_score / oom_score_adj - Параметры для OOM Killer: вероятность завершения процесса при нехватке памяти.
  • attr/ - Содержит атрибуты безопасности, в частности для SELinux (например, current, exec, fscreate).

🔧 Планирование и статистика

  • schedstat - Подробная статистика планирования: время ожидания, исполнения, переключений.
  • timers / timerslack_ns - Информация о таймерах процесса и “гибкости” таймеров (минимальный интервал сна).
  • autogroup - Параметры автогруппировки потоков для более справедливого планирования.
  • cpuset - Набор CPU, на которых разрешено выполнение процесса (cgroups cpuset).

🌐 Сетевые параметры

  • net/ - Виртуальный каталог, содержащий сетевые параметры, сокеты и статистику.
  • mountinfo / mountstats - Расширенная информация о монтированных файловых системах и их статистика.

🧩 Служебные и отладочные файлы

  • auxv - Таблица вспомогательных значений, передаваемых процессу при запуске (используется динамическим линкером).
  • personality - Отражает “личность” процесса — режим совместимости ABI (например, Linux32 на x86_64).
  • patch_state - Состояние применения патчей ядра (для livepatch).
  • projid_map - Используется для проектов в user namespace (например, в container environments).
  • syscall - Текущий системный вызов, выполняемый потоком (если процесс в состоянии “syscall”).
  • comm - Имя команды процесса (то, что видно в ps как COMMAND).
  • map_files/ - Символические ссылки на файлы, отображённые в память (используется для отладки).
  • fdinfo/ - Расширенные данные о каждом файловом дескрипторе: offset, flags, pos.
  • coredump_filter - Настройки, какие области памяти включать в core dump.

🧩 Пример анализа

cat /proc/193412/status | grep -E 'Name|Pid|VmRSS|Threads'
Name:   nginx
Pid:    193412
VmRSS:  42 MB
Threads:  4

Этот вывод показывает базовую информацию о процессе nginx — имя, PID, объём занятой памяти и количество потоков.


🧭 Вывод

Каталог /proc/[PID] — это фундаментальный интерфейс взаимодействия с ядром Linux.
Через него инструменты вроде ps, top, htop, strace, lsof и systemd получают данные о процессах, памяти, планировании и ресурсах.

Понимание структуры /proc/[PID] — это ключ к диагностике, профилированию и глубокому пониманию внутренней архитектуры Linux.


📖 Полезные ссылки

Директории и файлы процесса в /proc/[PID] | Aleksandr Suprun