Red Hat Training

A Red Hat training course is available for Red Hat Linux

3.6. 将进程移至控制群组

您可以运行 cgclassify 指令将进程移动到 cgroup 中:
cgclassify -g controllers:path_to_cgroup pidlist
其中:
  • controllers 是资源控制器列表,以逗号分隔;或者使用 * 来启动与所用可用子系统相关的层级中的进程。请注意,如果几个 cgroup 的名称相同,-g 选项会将进程移至这些群组的每一个。
  • path_to_cgroup 是层级中 cgroup 的路径;
  • pidlistprocess 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	%	  %