1.2. 서브시스템, 계층, 컨트롤 그룹, 작업 간의 관계
단일 서브시스템 (예: cpu)는 하나의 계층에만 연결할 수 있습니다.
cpu 서브시스템은 두 개의 서로 다른 계층에 연결될 수 없습니다.
단일 계층에 하나 이상의 서브시스템을 연결할 수 있습니다.
cpu 및 memory 서브시스템 (혹은 서브시스템 수)을 각각이 다른 계층에 연결되어 있지 않는한 단일 계층에 연결할 수 있습니다.
시스템에 새로운 계층이 생성될 때 마다 시스템의 모든 작업은 해당 계층의 디폴트 cgroup의 멤버가 됩니다. 이는 root cgroup이라고 합니다. 생성된 단일 계층의 경우 시스템의 각 작업은 해당 계층에 있는 정확하게 하나의 cgroup의 멤버가 될 수 있습니다. 각각의 cgroup이 다른 계층에 있는 한 단일 작업은 여러 cgroup에 있을 수 있습니다. 작업이 동일한 계층에 있는 두 번째 cgroup의 멤버가 될 경우, 이는 계층의 첫 번째 cgroup에서 바로 삭제됩니다. 작업이 동일한 계층에 있는 두 개의 다른 cgroup의 멤버가 될 수 없습니다.
cpu 및 memory 서브시스템이 cpu_and_mem이라는 계층에 연결되고 net_cls 서브시스템이 net이라는 계층에 연결된 경우, 실행 중인 httpd 프로세스는 cpu_and_mem에 있는 하나의 cgroup 그리고 net에 있는 하나의 cgroup의 멤버가 될 수 있습니다.
httpd 프로세스가 속한 cpu_and_mem에 있는 cgroup은 다른 프로세스에 할당된 시간의 절반으로 CPU 시간이 제한되어 있고 메모리 사용량이 최대 1024 MB로 제한되는 멤버일 수 있습니다. 또한, net에 있는 cgroup은 전송 속도가 초당 30 메가바이트로 제한되는 멤버일 수 있습니다.
자신을 포크하는 시스템에 있는 하나의 프로세스 (작업)는 자식 프로세스(작업)을 생성합니다. 자식 작업은 자동으로 부모가 멤버인 모든 cgroup의 멤버가 됩니다. 그 후 자식 작업은 필요에 따라 다른 cgroup으로 이동할 수 있지만 처음에는 부모 작업의 cgroup (프로세스 용어로 "환경"이라함)을 상속합니다.
cpu_and_mem 계층에 있는 half_cpu_1gb_max라는 cgroup의 멤버와 net 계층에 있는 trans_rate_30라는 cgroup의 멤버인 httpd 작업을 고려해 봅시다. httpd 프로세스가 자신을 포크하면 자식 프로세스는 자동으로 half_cpu_1gb_max cgroup과 trans_rate_30 cgroup의 멤버가 되어 부모 작업이 속해 있는 것과 동일한 cgroup을 상속합니다.