Show Table of Contents
2.9. 在控制组群中启动一个进程
重要
有些子系统拥有强制参数,您在可以将任务移动到使用那些子系统的 cgroup 前必须设定这些参数。例如:在您将任务移动到使用
cpuset 子系统的 cgroup 前,必须为那个 cgroup 定义 cpuset.cpus 和 cpuset.mems 参数。
本章的示例演示了命令的正确语法,但只适用于在此示例中为所有控制器设定了相关强制参数的系统。如果您还没有配置相关控制器,您就无法直接将本章中的命令示例直接用于您的系统。
给定子系统的强制参数的描述请参考 第 3.10 节 “附加资源”。
您还可以运行
cgexec 命令在 cgroup 中启动进程。例如:这个命令启动了 group1 cgroup 中的 lynx 网页浏览器,目的是限制 cpu 子系统为那个组群造成的负担。
~]# cgexec -g cpu:group1 lynx http://www.redhat.comcgexec 语法为:cgexec -g subsystems:path_to_cgroup command arguments ,其中:
- subsystems 是用逗号分开的子系统列表或者
*启动与所有可用子系统关联的层级中的进程。请注意:如 第 2.7 节 “设置参数” 所述的cgset,如果在多个层级中有同名的 cgroup,-g选项会在每个组群中创建进程。请确定您在拥有在此指定的子系统的层级中都有该 cgroup。 - path_to_cgroup 是到与该层级相关的 cgroup 的路径。
- command 是要运行的命令
- arguments 是该命令所有参数
您还可以在 command 前面添加
-- sticky 将所有子进程放在同一 cgroup 中。如果您没有设定这个选项,且 cgred 守护进程正在运行,则将根据在 /etc/cgrules.conf 中的设置将子进程分配到 cgroup 中。而该进程本身仍保留在启动它的 cgroup 中。
备用方法
当您启动新进程时,它会继承其父进程的组群。因此在具体 cgroup 中启动进程的备选方法是将您的 shell 进程移动到那个组群中(请参考 第 2.8 节 “将某个进程移动到控制组群中”),然后在那个 shell 中启动该进程。例如:
~]#echo $$ > /cgroup/lab1/group1/taskslynx
请注意:退出 lynx 后,您现有 shell 中仍在
group1 cgroup 中。因此更好的方法应为:
~]# sh -c "echo \$$ > /cgroup/lab1/group1/tasks && lynx"2.9.1. 在控制组群中启动服务
您可在某个 cgroup 中启动某些服务。在 cgroup 中启动的服务必须:
- 使用
/etc/sysconfig/servicename文件 - 使用
/etc/init.d/functions的daemon()功能启动该服务
要在某个 cgroup 中启动合格服务,请在
/etc/sysconfig 中编辑其文件,使该文件包含格式如下的条目:CGROUP_DAEMON="subsystem:control_group",其中 subsystem 是与具体层级关联的子进程,control_group 是那个层级中的 cgroup。例如:
CGROUP_DAEMON="cpuset:daemons/sql"

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.