Cgroup内核文档翻译(8)——Documentation/cgroup-v1/pids.txt

Process Number Controller
=========================

抽象
--------

进程号控制器用于允许cgroup层次结构在达到一定限制后停止任何新任务被 fork() 或 clone() 。

由于在不达到任何kmemcg限制的情况下达到任务限制很简单,因此PID是基本资源。 因此,
必须通过限制cgroup中任务数量的资源,在cgroup层次结构范围内防止PID耗尽。


用法
-----

为了使用`pids`控制器,请在 pids.max 中设置最大任务数(出于显而易见的原因,此命令在根cgroup中不可用)。
cgroup中当前的进程数由 pids.current 给出。

组织操作不受 cgroup 策略的阻止,因此可以使 pids.current > pids.max。
可以通过将限制设置为小于 pids.current 或将足够多的进程附加到cgroup以使 pids.current > pids.max来完成。
但是,不可能通过 fork()或clone() 违反cgroup策略。如果创建新进程将导致违反cgroup策略,
则fork()和clone()将返回-EAGAIN。

要将cgroup设置为无限制,请将 pids.max 设置为“ max”。这是所有新cgroup的默认设置(N.B. PID限制是分层的,
因此遵循分层中最严格的限制)。

pids.current 跟踪所有子cgroup层次结构,因此 parent/pids.current 是 parent/child/pids.current 的超集。


例子
-------

首先,我们安装pids控制器:

# mkdir -p /sys/fs/cgroup/pids
# mount -t cgroup -o pids none /sys/fs/cgroup/pids

然后,我们创建一个层次结构,设置限制并将进程附加到该层次结构:

# mkdir -p /sys/fs/cgroup/pids/parent/child
# echo 2 > /sys/fs/cgroup/pids/parent/pids.max
# echo $$ > /sys/fs/cgroup/pids/parent/cgroup.procs
# cat /sys/fs/cgroup/pids/parent/pids.current
2
#

应该注意的是,尝试克服设置的限制(在这种情况下为2)将失败:

# cat /sys/fs/cgroup/pids/parent/pids.current
2
# ( /bin/echo "Here's some processes for you." | cat )
sh: fork: Resource temporary unavailable
#

即使我们迁移到子cgroup(没有设置限制),我们也将无法克服层次结构中最严格的限制(在这种情况下,是父级):

复制代码
# echo $$ > /sys/fs/cgroup/pids/parent/child/cgroup.procs
# cat /sys/fs/cgroup/pids/parent/pids.current
2
# cat /sys/fs/cgroup/pids/parent/child/pids.current
2
# cat /sys/fs/cgroup/pids/parent/child/pids.max
max
# ( /bin/echo "Here's some processes for you." | cat )
sh: fork: Resource temporary unavailable
#
复制代码

我们可以设置一个小于 pids.current 的限制,这将完全阻止任何新进程被派生(请注意,shell本身算作pids.current):

# echo 1 > /sys/fs/cgroup/pids/parent/pids.max
# /bin/echo "We can't even spawn a single process now."
sh: fork: Resource temporary unavailable
# echo 0 > /sys/fs/cgroup/pids/parent/pids.max
# /bin/echo "We can't even spawn a single process now."
sh: fork: Resource temporary unavailable
#

 

posted on   Hello-World3  阅读(366)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-01-19 android BSP移植综述

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示