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.com
cgexec 语​​​法​​​为​​​: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/tasks
lynx
请​​​注​​​意​​​:退​​​出​​​ 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"