向tasks文件写入进程PID是通过attach_task_by_pid()函数实现的,代码如下: staticintattach_task_by_pid(struct cgroup *cgrp,char*pidbuf) { pid_tpid; structtask_struct*tsk; intret; if(sscanf(pidbuf,"%d", &pid) !=1)// 读取进程pid return-EIO; if(pid) {// 如果有指定进程pid ... tsk = ...
root_list 是一个嵌入的 list_head,用于将系统所有的层级连成链表。子系统对应的结构体是 cgroup_subsys,代码如清单 14 所示。 清单14. cgroup_subsys 代码 struct cgroup_subsys { struct cgroup_subsys_state *(*create)(struct cgroup_subsys *ss, struct cgroup *cgrp); int (*pre_destroy)(struct cgroup_...
$echo1029 > tasks# 将PID为1029的进程添加到cgrp1控制组中 我们也可以通过读取 tasks 文件来查看某个 控制组 中的进程列表,例如: $cat tasks 1 2 3 5 6 7 ... 在内核中,控制组使用 cgroup 结构来表示,其定义如下: structcgroup{ ... // 下面3个字段把控制组连接成一个树结构 structlist_headsibling...
向tasks 文件写入进程PID是通过 attach_task_by_pid 函数实现的,代码如下: staticintattach_task_by_pid(struct cgroup *cgrp,char*pidbuf) { pid_tpid; structtask_struct*tsk; intret; if(sscanf(pidbuf,"%d", &pid) !=1)// 读取进程pid return-EIO; if(pid) {// 如果有指定进程pid ... tsk =...
int (*pre_destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, struct task_struct *tsk, bool threadgroup); ...
destroy_super(s); return ERR_PTR(err); } s->s_type = type; //该sb所属文件系统类型为cgroup_fs_type strlcpy(s->s_id, type->name, sizeof(s->s_id)); // s->s_id = "cgroup" list_add_tail(&s->s_list, &super_blocks); // 加进super_block全局链表 ...
spin_lock(&sb_lock);if(test) {//尝试找到一个已存在的sbhlist_for_each_entry(old, &type->fs_supers, s_instances) {if(!test(old, data))continue;if(!grab_super(old))gotoretry;if(s) { up_write(&s->s_umount); destroy_super(s); ...
struct mutex pidlist_mutex; struct rcu_head rcu_head; struct list_head event_list; spinlock_t event_list_lock; }; sibling,children和parent三个嵌入的list_head负责将统一层级的cgroup连接成一棵cgroup树。 subsys是一个指针数组,存储一组指向cgroup_subsys_state的指针。这组指针指向了此cgroup跟各个子系统...
struct mutex pidlist_mutex; struct rcu_head rcu_head; struct list_head event_list; spinlock_t event_list_lock; }; sibling,children 和 parent 三个嵌入的 list_head 负责将统一层级的 cgroup 连接成一棵 cgroup 树。 subsys 是一个指针数组,存储一组指向 cgroup_subsys_state 的指针。这组指针指向了...
void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, struct task_struct *tsk, bool threadgroup); void (*cancel_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, struct task_struct *tsk, bool thread...