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"