← Back to notes

Структура /proc/[PID]
в Linux


/proc/[PID]

/proc — виртуальная ФС типа proc, генерируемая ядром. Каждому процессу соответствует каталог /proc/[PID], содержимое создаётся on-demand. Полный справочник полей — proc(5).


Базовые файлы

  • cmdline — argv, разделённые \0.
  • exe — symlink на исполняемый файл.
  • cwd — symlink на текущий рабочий каталог.
  • root — symlink на корневой каталог процесса (отличается после chroot(2)).
  • environ — окружение, разделённое \0.
  • fd/ — symlink'и на открытые файловые дескрипторы (0 — stdin, 1 — stdout, 2 — stderr).
  • fdinfo/ — для каждого fd: pos, flags, mnt_id, тип объекта.
  • maps — карта виртуальной памяти (адрес, права, offset, dev, inode, путь).
  • smaps — детализация по VMA: RSS, PSS, Shared/Private clean/dirty.
  • smaps_rollup — агрегированные значения по всему процессу.
  • mem — содержимое адресного пространства (требует ptrace).
  • stat — однострочная сводка (PID, comm, state, PPID, PGID, ...; формат в proc(5)).
  • status — то же в человекочитаемом виде с метками: Name, State, Pid, PPid, Uid, Gid, VmRSS, Threads, SigQ и т.д.
  • io — счётчики I/O: rchar, wchar, syscr, syscw, read_bytes, write_bytes, cancelled_write_bytes.
  • wchan — символ функции ядра, в которой спит процесс.
  • comm — короткое имя задачи (TASK_COMM_LEN = 16 байт вместе с завершающим \0, видимо до 15 байт; доступно для записи).
  • task/ — подкаталоги по TID для каждого потока (/proc/[PID]/task/[TID]).
  • mounts, mountinfo, mountstats — точки монтирования, видимые в mount namespace процесса.
  • net/ — сетевые статистики namespace процесса.

Память

  • numa_maps — карта VMA по NUMA-узлам.
  • clear_refs — запись управляет сбросом access/dirty-битов PTE.
  • pagemap — соответствие виртуальных страниц физическим (бинарный формат, см. Documentation/admin-guide/mm/pagemap.rst).
  • coredump_filter — битовая маска: какие сегменты включать в core dump.

Безопасность и namespaces

  • uid_map, gid_map — таблицы трансляции UID/GID для user namespace.
  • setgroupsallow/deny для setgroups(2) в user namespace.
  • cgroup — путь(и) cgroup, к которым принадлежит процесс (v1: на контроллер, v2: одна запись).
  • loginuid — UID, заданный при логине (PAM, для auditd).
  • sessionid — идентификатор audit-сессии.
  • oom_score — текущая оценка OOM killer.
  • oom_score_adj — корректировка (-1000…1000); -1000 исключает процесс из OOM.
  • oom_adj — устаревший интерфейс (-17…15), сохранён для совместимости.
  • attr/ — LSM-атрибуты (SELinux: current, prev, exec, fscreate, keycreate, sockcreate).
  • ns/ — symlink'и на namespaces процесса (mnt, pid, net, ipc, uts, user, cgroup, time).

Планирование

  • sched — параметры планировщика (policy, prio, vruntime).
  • schedstattime on CPU, time waiting, # timeslices.
  • autogroup — настройки autogroup-планирования.
  • cpuset — путь cpuset cgroup.
  • timers, timerslack_ns — POSIX-таймеры процесса и значение timer slack.

Прочее

  • auxv — auxiliary vector, передаваемый ELF-загрузчиком (см. getauxval(3)).
  • personality — биты personality(2) (например, PER_LINUX32).
  • syscall — номер текущего syscall и аргументы (если поток в нём).
  • map_files/ — symlink'и на mapped-файлы по диапазону адресов.
  • arch_status — архитектурно-зависимые поля (на x86 содержит AVX-state).

Набор файлов зависит от версии ядра, конфигурации (CONFIG_*) и LSM.


Пример

$ grep -E '^(Name|Pid|VmRSS|Threads):' /proc/193412/status
Name:    nginx
Pid:     193412
VmRSS:   43008 kB
Threads: 4

Ссылки

Структура /proc/[PID] в Linux | Aleksandr Suprun