Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.9. 在​​​控​​​制​​​群​​​組​​​中​​​啟​​​動​​​一​​​項​​​程​​​序​​​

重要

有​​​些​​​子​​​系​​​統​​​需​​​要​​​您​​​在​​​將​​​任​​​務​​​移​​​動​​​到​​​使​​​用​​​這​​​些​​​子​​​系​​​統​​​的​​​控​​​制​​​群​​​組​​​之​​​前​​​,先​​​設​​​置​​​必​​​要​​​的​​​參​​​數​​​。​​​比​​​方​​​說​​​,在​​​您​​​使​​​用​​​ cpuset 子​​​系​​​統​​​之​​​前​​​,您​​​必​​​須​​​先​​​定​​​義​​​ cpuset.cpus 和​​​ cpuset.mems 參​​​數​​​。​​​
此​​​部​​​份​​​中​​​的​​​範​​​例​​​描​​​述​​​了​​​指​​​令​​​的​​​正​​​確​​​語​​​法​​​,不​​​過​​​這​​​只​​​在​​​已​​​設​​​置​​​了​​​範​​​例​​​中​​​所​​​使​​​用​​​的​​​控​​​制​​​器​​​之​​​必​​​要​​​參​​​數​​​的​​​系​​​統​​​上​​​有​​​效​​​。​​​若​​​您​​​還​​​未​​​配​​​置​​​相​​​關​​​的​​​控​​​制​​​器​​​,您​​​不​​​能​​​將​​​此​​​部​​​份​​​中​​​的​​​範​​​例​​​指​​​令​​​直​​​接​​​複​​​製​​​,並​​​預​​​期​​​它​​​們​​​能​​​在​​​您​​​的​​​系​​​統​​​上​​​運​​​作​​​。​​​
請​​​參​​​閱​​​ 節 3.10, “額​​​外​​​資​​​源​​​”,以​​​取​​​得​​​特​​​定​​​子​​​系​​​統​​​的​​​必​​​要​​​參​​​數​​​之​​​詳​​​述​​​。​​​
您​​​可​​​透​​​過​​​執​​​行​​​ cgexec 指​​​令​​​來​​​在​​​控​​​制​​​群​​​組​​​中​​​啟​​​動​​​程​​​序​​​。​​​比​​​方​​​說​​​,這​​​項​​​指​​​令​​​會​​​在​​​ group1 控​​​制​​​群​​​組​​​中​​​啟​​​動​​​ lynx 網​​​站​​​瀏​​​覽​​​器​​​,並​​​且​​​遵​​​照​​​ cpu 子​​​系​​​統​​​在​​​該​​​群​​​組​​​上​​​所​​​強​​​制​​​使​​​用​​​的​​​限​​​制​​​:
~]# cgexec -g cpu:group1 lynx http://www.redhat.com
cgexec 的​​​語​​​法​​​為​​​:cgexec -g subsystems:path_to_cgroup command arguments ,而​​​:
  • subsystem(子​​​系​​​統​​​)代​​​表​​​一​​​個​​​逗​​​號​​​區​​​隔​​​開​​​的​​​子​​​系​​​統​​​清​​​單​​​,* 以​​​啟​​​動​​​與​​​所​​​有​​​可​​​用​​​子​​​系​​​統​​​相​​​聯​​​的​​​階​​​層​​​中​​​的​​​程​​​序​​​。​​​請​​​注​​​意​​​,如​​​描​​​述​​​於​​​〈​​​節 2.7, “設​​​定​​​參​​​數​​​”〉​​​中​​​的​​​ cgset,若​​​相​​​同​​​名​​​稱​​​的​​​控​​​制​​​群​​​組​​​存​​​在​​​多​​​重​​​階​​​層​​​中​​​,-g 選​​​項​​​便​​​會​​​在​​​各​​​個​​​這​​​些​​​群​​​組​​​中​​​建​​​立​​​程​​​序​​​。​​​請​​​確​​​認​​​控​​​制​​​群​​​組​​​存​​​在​​​您​​​在​​​此​​​所​​​指​​​定​​​的​​​子​​​系​​​統​​​的​​​各​​​個​​​階​​​層​​​中​​​。​​​
  • path_to_cgroup 代​​​表​​​與​​​階​​​層​​​相​​​關​​​的​​​控​​​制​​​群​​​組​​​之​​​路​​​徑​​​。​​​
  • command 代​​​表​​​欲​​​執​​​行​​​的​​​指​​​令​​​
  • arguments 為​​​指​​​令​​​的​​​任​​​何​​​引​​​數​​​
您​​​亦​​​可​​​在​​​ command 之​​​前​​​附​​​加​​​ --sticky 選​​​項​​​,以​​​保​​​留​​​相​​​同​​​控​​​制​​​群​​​組​​​中​​​的​​​任​​​何​​​子​​​程​​​序​​​。​​​若​​​您​​​不​​​設​​​置​​​此​​​選​​​項​​​,而​​​ cgred daemon 正​​​在​​​執​​​行​​​的​​​話​​​,子​​​程​​​序​​​將​​​會​​​被​​​根​​​據​​​ /etc/cgrules.conf 中​​​的​​​設​​​定​​​,分​​​配​​​給​​​控​​​制​​​群​​​組​​​。​​​然​​​而​​​,程​​​序​​​本​​​身​​​將​​​會​​​保​​​留​​​在​​​您​​​所​​​啟​​​動​​​其​​​的​​​控​​​制​​​群​​​組​​​中​​​。​​​

額​​​外​​​方​​​式​​​

當​​​您​​​啟​​​動​​​一​​​項​​​新​​​程​​​序​​​時​​​,它​​​會​​​繼​​​承​​​其​​​父​​​程​​​序​​​的​​​群​​​組​​​。​​​因​​​此​​​,另​​​一​​​項​​​在​​​特​​​定​​​控​​​制​​​群​​​組​​​中​​​啟​​​動​​​程​​​序​​​的​​​方​​​式​​​,就​​​是​​​將​​​您​​​的​​​ shell 程​​​序​​​移​​​至​​​該​​​群​​​組​​​(請​​​參​​​閱​​​〈​​​節 2.8, “將​​​程​​​序​​​移​​​動​​​至​​​控​​​制​​​群​​​組​​​中​​​”〉​​​),並​​​由​​​該​​​ shell 啟​​​動​​​程​​​序​​​。​​​例​​​如​​​:
~]# echo $$ > /cgroup/lab1/group1/tasks
lynx
請​​​注​​​意​​​,在​​​退​​​出​​​了​​​ lynx 之​​​後​​​,您​​​既​​​有​​​的​​​ shell 還​​​會​​​存​​​在​​​ group1 控​​​制​​​群​​​組​​​中​​​。​​​因​​​此​​​,有​​​個​​​更​​​佳​​​的​​​方​​​式​​​就​​​是​​​:
~]# sh -c "echo \$$ > /cgroup/lab1/group1/tasks && lynx"

2.9.1. 在​​​控​​​制​​​群​​​組​​​中​​​啟​​​動​​​一​​​項​​​服​​​務​​​

您​​​可​​​在​​​控​​​制​​​群​​​組​​​中​​​啟​​​用​​​一​​​些​​​服​​​務​​​。​​​可​​​啟​​​用​​​於​​​控​​​制​​​群​​​組​​​中​​​的​​​服​​​務​​​必​​​須​​​:
  • 使​​​用​​​一​​​個​​​ /etc/sysconfig/servicename 檔​​​案​​​
  • 使​​​用​​​來​​​自​​​於​​​ /etc/init.d/functions 的​​​ daemon() 功​​​能​​​來​​​啟​​​用​​​服​​​務​​​
若​​​要​​​在​​​控​​​制​​​群​​​組​​​中​​​啟​​​動​​​一​​​項​​​服​​​務​​​,請​​​編​​​輯​​​它​​​位​​​於​​​ /etc/sysconfig 目​​​錄​​​中​​​的​​​檔​​​案​​​,以​​​包​​​含​​​一​​​項​​​格​​​式​​​為​​​ CGROUP_DAEMON="subsystem:control_group" 的​​​項​​​目​​​,subsystem 為​​​與​​​特​​​定​​​階​​​層​​​相​​​聯​​​的​​​子​​​系​​​統​​​,control_group 則​​​為​​​該​​​階​​​層​​​中​​​的​​​控​​​制​​​群​​​組​​​。​​​例​​​如​​​:
CGROUP_DAEMON="cpuset:daemons/sql"