3.6. 将进程移至控制群组
您可以运行
cgclassify 指令将进程移动到 cgroup 中:
cgclassify -g controllers:path_to_cgroup pidlist
cgclassify -g controllers:path_to_cgroup pidlist
其中:
- controllers 是资源控制器列表,以逗号分隔;或者使用
*来启动与所用可用子系统相关的层级中的进程。请注意,如果几个 cgroup 的名称相同,-g选项会将进程移至这些群组的每一个。 - path_to_cgroup 是层级中 cgroup 的路径;
- pidlist 是 process identifier(PID)的列表,以空格隔开。
如果没有明确
-g 选项,cgclassify 会自动搜索 /etc/cgrules.conf,并且使用第一个适用配置行。根据此配置行,cgclassify 会确定进程将移至的层级和 cgroup。请注意,为确保移动成功,目标层级必须存在。/etc/cgrules.conf 指定的子系统也必须被合理配置来回应 /etc/cgconfig.conf 中的层级。
您还可以在 pid 前面添加
--sticky 选项以保证所有子进程位于同一 cgroup 中。如果您没有设定这个选项且 cgred 服务正在运行,则子进程会根据 /etc/cgrules.conf 中的设置被分配到 cgroup 中。而该进程本身仍保留在启动它的 cgroup 中。
您还可以使用 cgred 服务(
cgrulesengd 后台驻留程序启动服务),此服务会根据 /etc/cgrules.conf 文件中设定的参数将任务移至 cgroup。请仅将 cgred 用于管理手动附加的管控器。/etc/cgrules.conf 文件条目的形式可以是以下两种之一:
- user subsystems control_group;
- user:command subsystems control_group。
例如:
maria net_prio /usergroup/staff
maria net_prio /usergroup/staff
此条目指定任何属于名为
maria 用户的进程,都可以根据 /usergroup/staff cgroup 指定的参数存取 devices 子系统。要将特定指令与具体 cgroup 关联,请添加 command 参数,如下:
maria:ftp devices /usergroup/staff/ftp
maria:ftp devices /usergroup/staff/ftp
此条目现指定,当名为
maria 的用户使用 ftp 指令时,该进程将被自动移动到包含 devices 子系统的层级的 /usergroup/staff/ftp cgroup 中。然而,请注意:只有在符合适当条件后,后台驻留程序才可将该进程移动到 cgroup 中。因此,ftp 进程可能会在错误的群组中短暂运行。另外,如果该进程在错误群组中迅速生成子进程,这些子进程可能不会被移动。
/etc/cgrules.conf 文件中的条目可包括以下额外符号:
@—— 被用作 user 前缀时,它代表一个群组而不是单独用户。例如:@admins表示admins组群中的所有用户。*—— 代表“所有”。例如:subsystem字段中的*代表所有子系统。%—— 代表与上一行相同的项目。例如:@adminstaff net_prio /admingroup @labstaff % %
@adminstaff net_prio /admingroup @labstaff % %Copy to Clipboard Copied! Toggle word wrap Toggle overflow