Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
3.6. 将进程移至控制群组
您可以运行
cgclassify
指令将进程移动到 cgroup 中:
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
用户的进程,都可以根据 /usergroup/staff
cgroup 指定的参数存取 devices
子系统。要将特定指令与具体 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 net_prio /admingroup @labstaff % %