2.8. 将​​​某​​​个​​​进​​​程​​​移​​​动​​​到​​​控​​​制​​​组​​​群​​​中​​​

您​​​还​​​可​​​以​​​运​​​行​​​ cgclassify 命​​​令​​​将​​​进​​​程​​​移​​​动​​​到​​​ cgroup 中​​​:
~]# cgclassify -g cpu,memory:group1 1701
cgclassify 的​​​语​​​法​​​为​​​:cgclassify -g subsystems:path_to_cgroup pidlist,其​​​中​​​:
  • subsystems 是​​​用​​​逗​​​号​​​分​​​开​​​的​​​子​​​系​​​统​​​列​​​表​​​,或​​​者​​​ * 启​​​动​​​与​​​所​​​有​​​可​​​用​​​子​​​系​​​统​​​关​​​联​​​的​​​层​​​级​​​中​​​的​​​进​​​程​​​。​​​请​​​注​​​意​​​:如​​​果​​​在​​​多​​​个​​​层​​​级​​​中​​​有​​​同​​​名​​​的​​​ cgroup,则​​​ -g 选​​​项​​​会​​​将​​​该​​​进​​​程​​​移​​​动​​​到​​​每​​​个​​​组​​​群​​​中​​​。​​​请​​​确​​​定​​​在​​​拥​​​有​​​您​​​在​​​此​​​指​​​定​​​子​​​系​​​统​​​的​​​每​​​个​​​层​​​级​​​中​​​都​​​有​​​该​​​ cgroup。​​​
  • path_to_cgroup 是​​​到​​​其​​​层​​​级​​​中​​​的​​​ cgroup 的​​​路​​​径​​​
  • pidlist 是​​​用​​​空​​​格​​​分​​​开​​​的​​​进​​​程​​​识​​​别​​​符​​​(PID)列​​​表​​​
您​​​还​​​可​​​以​​​在​​​ pid 前​​​面​​​添​​​加​​​ -- sticky 选​​​项​​​以​​​保​​​证​​​所​​​有​​​子​​​进​​​程​​​位​​​于​​​同​​​一​​​ cgroup 中​​​。​​​如​​​果​​​您​​​没​​​有​​​设​​​定​​​这​​​个​​​选​​​项​​​且​​​ cgred 守​​​护​​​进​​​程​​​正​​​在​​​运​​​行​​​,则​​​会​​​根​​​据​​​ /etc/cgrules.conf 中​​​的​​​设​​​置​​​将​​​子​​​进​​​程​​​分​​​配​​​到​​​ cgroup 中​​​。​​​该​​​进​​​程​​​本​​​身​​​则​​​仍​​​保​​​留​​​在​​​启​​​动​​​它​​​的​​​ cgroup 中​​​。​​​
使​​​用​​​ cgclassify,您​​​可​​​以​​​同​​​时​​​移​​​动​​​多​​​个​​​进​​​程​​​。​​​例​​​如​​​:这​​​个​​​命​​​令​​​将​​​ PID 为​​​ 1701 和​​​ 1138 的​​​进​​​程​​​移​​​动​​​到​​​ cgroup 中​​​的​​​ group1/
~]# cgclassify -g cpu,memory:group1 1701 1138
请​​​注​​​意​​​要​​​移​​​动​​​的​​​ PID 间​​​要​​​用​​​空​​​格​​​分​​​开​​​,且​​​应​​​该​​​在​​​不​​​同​​​的​​​层​​​级​​​中​​​指​​​定​​​这​​​些​​​组​​​群​​​。​​​

备​​​用​​​方​​​法​​​

要​​​将​​​进​​​程​​​直​​​接​​​移​​​动​​​到​​​ cgroup 中​​​,请​​​将​​​其​​​ PID 写​​​入​​​该​​​ cgroup 中​​​的​​​ tasks 文​​​件​​​中​​​。​​​例​​​如​​​:要​​​将​​​ PID 为​​​ 1701 的​​​进​​​程​​​移​​​动​​​到​​​位​​​于​​​ /cgroup/lab1/group1/ 的​​​ cgroup 中​​​:
~]# echo 1701 > /cgroup/lab1/group1/tasks

2.8.1. cgred 守​​​护​​​进​​​程​​​

Cgred 是​​​一​​​个​​​守​​​护​​​进​​​程​​​,它​​​可​​​根​​​据​​​在​​​ /etc/cgrules.conf 文​​​件​​​中​​​设​​​定​​​的​​​参​​​数​​​将​​​任​​​务​​​移​​​动​​​到​​​ cgroup 中​​​。​​​/etc/cgrules.conf 文​​​件​​​中​​​的​​​条​​​目​​​可​​​以​​​使​​​用​​​以​​​下​​​两​​​个​​​格​​​式​​​之​​​一​​​:
  • user hierarchies control_group
  • user:command hierarchies control_group
例​​​如​​​:
maria			devices		/usergroup/staff
这​​​个​​​条​​​目​​​指​​​定​​​任​​​何​​​属​​​于​​​名​​​为​​​ maria 用​​​户​​​的​​​进​​​程​​​根​​​据​​​在​​​ /usergroup/staff cgroup 中​​​指​​​定​​​的​​​参​​​数​​​访​​​问​​​设​​​备​​​子​​​系​​​统​​​。​​​要​​​将​​​具​​​体​​​命​​​令​​​与​​​具​​​体​​​ 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		devices		/admingroup
    @labstaff		%		%