Cgroup процесса: принадлежность, версия и видимый путь
Найдите cgroup выбранного PID, отличите v2 от legacy-записей и сопоставьте путь с монтированием, не предполагая одинаковую структуру внутри контейнера.
Сначала найдите группу нужной нагрузки
Прежде чем читать лимит контейнера или службы, установите, к какой группе относится её текущий процесс. Иначе легко измерить родительский каталог, соседнюю службу или собственную оболочку и приписать эти цифры приложению.
Учебная последовательность начинается с Bash: читаем её принадлежность и список монтирований cgroup2. Только после сопоставления пути имеет смысл переходить к страницам о памяти, CPU и количестве задач.
Запись процесса и каталог контроллеров
В /proc/PID/cgroup указана принадлежность к иерархиям. У v2 запись имеет форму 0::/путь; legacy-конфигурация может дать несколько строк. Пространство cgroup способно показывать путь относительно своего корня, а не полного дерева хоста.
Найдите монтирование cgroup2 и его FSROOT. При обычном полном монтировании с корнем / путь группы сопоставляется с TARGET плюс путь записи. При срезанном дереве или ограниченном представлении контейнера нельзя механически склеивать строки и объявлять результат каталогом нужной нагрузки.
Прочитайте принадлежность и монтирование
Нужны Linux, Bash и findmnt из util-linux. Команды показывают фактическое окружение; они не создают cgroup и не перемещают в неё процессы.
membership_pid=$$
cat "/proc/$membership_pid/cgroup"
findmnt -t cgroup2 -o TARGET,FSROOT,FSTYPEПроверьте путь до чтения лимитов
В самостоятельно заданном примере запись равна 0::/training.slice/session.scope, TARGET — /sys/fs/cgroup, FSROOT — /. Для такого полного монтирования ожидаемый каталог — /sys/fs/cgroup/training.slice/session.scope. Это пример сопоставления, а не имя, которое обязано существовать у вас.
Если запись равна 0::/, не заключайте, что ограничений нет. В контейнере видимый корень может быть частью большей иерархии. Если findmnt не показал cgroup2, сначала разберитесь с версией и доступными монтированиями; применять имена интерфейсов v2 к legacy-дереву нельзя.
Проверьте своё рассуждение
Задача: в отчёте нет cpu.max по склеенному пути. Доказывает ли это отсутствие CPU-ограничения у службы?
Нет. Сначала проверьте группу, версию, видимость монтирования и доступность контроллера. Чтение несуществующего пути — проблема выбора источника данных, а не измерение бесконечного бюджета.
Принадлежность может измениться
Служба может перезапуститься, процесс — перейти в другую группу, а контейнер — скрывать родительскую иерархию. Записывайте PID и точный каталог вместе со снимком. Примеры следующих страниц требуют заменить демонстрационный путь на проверенный; они намеренно не вычисляют его вслепую.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Документация ядра Linux — Control Group v2
- Linux man-pages — cgroups(7)
- Linux man-pages — proc_pid_cgroup(5)
- Linux man-pages — findmnt(8)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Нужны Linux с procfs и findmnt из util-linux. Страница определяет видимость cgroup v2; legacy и гибридные конфигурации требуют отдельного разбора. Монтирования и принадлежность не меняются.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.