2.9. 컨트롤 그룹 안에서 프로세스 시작하기

중요

일부 서브시스템은 이러한 서브시스템을 사용하는 cgroup으로 작업을 이전하기 전 반드시 설정해야 하는 매개 변수가 있습니다. 예를 들어, cpuset 서브시스템을 이용하는 cgroup으로 작업을 이전하기 전 cgroup에 대해 cpuset.cpuscpuset.mems 매개 변수가 반드시 정의되어 있어야 합니다.
이 부분에 있는 예제에서는 명령에 대한 바른 문법을 보여주지만, 예제에서 사용되는 컨트롤러에 대한 필수 매개변수가 적절히 설정된 시스템에서만 제대로 작동할 것입니다. 만약 그러한 컨트롤러를 이미 설정하지 않은 경우라면, 예제에 있는 명령을 복사해서 실행해도 시스템에서 정상 동작하지 않을 것입니다.
특정 서브시스템에 필요한 매개 변수에 대한 설명은 3.10절. “추가 자원 ”에서 참조하십시오.
cgexec 명령을 실행해 cgroup에서 프로세스를 시작할 수 있습니다. 예를 들어, 이 명령은 lynx 웹 브라우저를 group1 cgroup 내에서 실행하여 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는 명령의 인수입니다
--sticky 옵션을 command 앞에 추가하여 자식 프로세스를 동일한 cgroup에 속하게 할 수 있습니다. 이 옵션을 설정하지 않고 cgred 데몬이 실행 중일 경우, 자식 프로세스는 /etc/cgrules.conf에서의 설정에 따라 cgroup을 할당하게 됩니다. 하지만 프로세스 자체는 시작한 cgroup에 남아있게 됩니다.

다른 방법

새로운 프로세스를 시작하면 해당 프로세스는 부모 프로세스의 그룹을 상속합니다. 따라서, 특정 cgroup 프로세스 시작을 위한 다른 방법은 쉘 프로세스를 그룹으로 이동하고 (2.8절. “프로세스를 컨트롤 그룹으로 옮기기” 참조) 그 쉘에서 프로세스를 시작하는 것입니다. 예:
~]# echo $$ > /cgroup/lab1/group1/tasks
lynx
lynx를 종료 후 기존 쉘은 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"