/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.
📖 Полезные ссылки