2.8. 将某个进程移动到控制组群中
您还可以运行
cgclassify
命令将进程移动到 cgroup 中:
~]# cgclassify -g cpu,memory:group1 1701
cgclassify
的语法为:cgclassify -g
subsystems:path_to_cgroup pidlist
,其中:
- subsystems 是用逗号分开的子系统列表,或者
*
启动与所有可用子系统关联的层级中的进程。请注意:如果在多个层级中有同名的 cgroup,则-g
选项会将该进程移动到每个组群中。请确定在拥有您在此指定子系统的每个层级中都有该 cgroup。 - path_to_cgroup 是到其层级中的 cgroup 的路径
- pidlist 是用空格分开的进程识别符(PID)列表
您还可以在 pid 前面添加
-- sticky
选项以保证所有子进程位于同一 cgroup 中。如果您没有设定这个选项且 cgred 守护进程正在运行,则会根据 /etc/cgrules.conf
中的设置将子进程分配到 cgroup 中。该进程本身则仍保留在启动它的 cgroup 中。
使用
cgclassify
,您可以同时移动多个进程。例如:这个命令将 PID 为 1701
和 1138
的进程移动到 cgroup 中的 group1/
:
~]# cgclassify -g cpu,memory:group1 1701 1138
请注意要移动的 PID 间要用空格分开,且应该在不同的层级中指定这些组群。
备用方法
要将进程直接移动到 cgroup 中,请将其 PID 写入该 cgroup 中的
tasks
文件中。例如:要将 PID 为 1701
的进程移动到位于 /cgroup/lab1/group1/
的 cgroup 中:
~]# echo 1701 > /cgroup/lab1/group1/tasks
2.8.1. cgred 守护进程
Cgred 是一个守护进程,它可根据在
/etc/cgrules.conf
文件中设定的参数将任务移动到 cgroup 中。/etc/cgrules.conf
文件中的条目可以使用以下两个格式之一:
- user hierarchies control_group
- user:command hierarchies control_group
例如:
maria devices /usergroup/staff
这个条目指定任何属于名为
maria
用户的进程根据在 /usergroup/staff
cgroup 中指定的参数访问设备子系统。要将具体命令与具体 cgroup 关联,请添加 command 参数,如下:
maria:ftp devices /usergroup/staff/ftp
该条目现在指定何时名为
maria
的用户使用 ftp
命令,自动将该进程移动到包含 devices
子系统的层级中的 /usergroup/staff/ftp
cgroup 中。请注意:该守护进程只有在符合适当的条件后才可将该进程移动到该 cgroup 中。因此,ftp
可能会在错误的组群中短暂运行。再有,如果该进程在错误组群中迅速生出子进程,则不会移动这些子进程。
/etc/cgrules.conf
文件中的条目可包括以下额外符号:
@
- 当在 user 使用前缀时,代表是一个组群而不是单独用户。例如:@admins
是admins
组群中的所有用户。*
- 代表“所有”。例如:subsystem
字段中的*
代表所有子系统。%
- 代表与以上行中项目相同的项目。例如:@adminstaff devices /admingroup @labstaff % %