每个进程都有独立cgroup吗?关于cgroup进程归属与继承的问询
关于Linux cgroup的疑问解答
首先明确cgroup的核心定义(来自man手册):
A cgroup is a collection of processes that are bound to a set of limits or parameters defined via the cgroup filesystem.
针对你的疑问逐一说明:
1. 是否每个进程都拥有自己的cgroup,且只有子进程才会被加入该cgroup?
- 不是每个进程都有独立的cgroup:多个进程可以被归类到同一个cgroup,cgroup本质是进程的分组,用来统一管控一组进程的资源限制,而非每个进程独占一个。
- 子进程默认继承父进程的cgroup,但并非只能加入父进程的cgroup:进程创建时会自动继承父进程的cgroup归属,但你可以通过修改cgroup文件系统中的对应文件(比如
/sys/fs/cgroup/.../tasks),将任意进程移动到其他已存在的cgroup中,不管它是不是该cgroup内进程的子进程。
2. INIT(PID 1)衍生的子进程是否都会获得关联父进程cgroup限制的独立cgroup,资源限制由发行版子系统设定?
- 子进程默认继承父进程的cgroup限制,但不会自动创建独立cgroup:INIT进程的子进程、孙进程默认会和INIT在同一个cgroup(或INIT所在的cgroup层级),除非有专门的工具或系统服务主动为它们创建新的cgroup。
- 资源限制的分配取决于系统的cgroup管理器:比如主流发行版使用的
systemd作为cgroup管理器,它会根据服务配置、用户会话等规则,将不同进程(如系统服务、用户应用)分配到不同cgroup中,每个服务可能会有独立cgroup来管控资源;但如果是用户手动启动的普通进程,默认会继承父进程的cgroup,不会自动生成独立cgroup,除非你手动配置或使用cgexec这类工具指定。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

