Я разрабатываю модуль ядра и хотел бы иметь возможность выводить список идентификаторов задач из группы.
Например: я создаю две группы в подсистеме cpuset: A и B. В / задачах ставлю PID. Из своего модуля я получаю указатель на группу subsys (например, &top_cpuset.css
) и перебираю ее дочерние элементы (здесь A и B благодаря struct list_head children;
в struct cgroup_subsys_state
).
Что мне не хватает, так это способ от детей перечислить задачи.
В struct cgroup
(доступно благодаря struct cgroup_subsys_state
) есть это поле: struct list_head pidlists
. Существует struct cgroup_pidlists
, но похоже, что эта структура и ее функции являются внутренними компонентами cgroup и не предназначены для использования (функции, структура и перечисление stati c определены в файле. c с номером .h).
Также в struct css_set
есть это поле struct list_head tasks;
. Но я не нашел пути от struct cgroup
или struct cgroup_subsys_state
до struct css_set
.
Я больше не знаю, что я могу сделать, чтобы перечислить различные задачи группы. Есть идеи?
Редактировать: я изменяю Linux 5.7.0
Редактировать 2:
Из struct task_struct
есть поле struct nsproxy *nsproxy;
. Что дает доступ к полю struct cgroup_namespace *cgroup_ns;
. Это дает доступ к struct css_set *root_cset
, где есть struct list_head tasks
.
Но моя проблема остается той же. Над struct list_head tasks
есть комментарий «Списки, выполняемые через все задачи, использующие эту группу контрольной группы». Но я не понимаю, как выбрать группу cgroup. То есть задача может быть в разных группах cgroup. Как получить struct list_head tasks
определенной c группы.