zoukankan      html  css  js  c++  java
  • 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
    #
  • 相关阅读:
    51nod 1179 最大的最大公约数
    HDU 6090 Rikka with Graph —— 2017 Multi-University Training 5
    HDU 6073 Matching In Multiplication —— 2017 Multi-University Training 4
    HDU 6069 Counting Divisors —— 2017 Multi-University Training 4
    HDU 6058 Kanade's sum —— 2017 Multi-University Training 3
    HDU 6055 Regular polygon —— 2017 Multi-University Training 2
    HDU 6053 TrickGCD —— 2017 Multi-University Training 2
    ORA-01722:无效数字
    ORA-01427 单行子查询返回多个行
    ORA 00972 错误处理
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/14295982.html
Copyright © 2011-2022 走看看