【问题标题】:What is the difference between cgroups freeze and linux command "Kill - STOP pid" in golang?golang中的cgroups freeze和linux命令“Kill - STOP pid”有什么区别?
【发布时间】:2021-09-30 03:28:59
【问题描述】:

我使用这个cgroups 包。

type Cgroup 有两个我感兴趣的接口。一个是Freeze() error,一个是Thaw() error。它们的描述如下:

    ...
    // Freeze freezes or pauses all processes inside the cgroup
    Freeze() error
    // Thaw thaw or resumes all processes inside the cgroup
    Thaw() error
    ...

还有两个linux命令可以暂停和恢复进程,分别是kill -STOP pidkill -CONT pid

我想知道如果一个cgroup中只有一个进程,那么这两种暂停和恢复进程的方式有什么区别吗?谢谢。

【问题讨论】:

    标签: linux go operating-system cgroups


    【解决方案1】:

    这两个州都是在 10 月推出的。 2016 在containerd/cgroups commit b3f3344 并参考cgroup v1 self-state

    cgroup 冷冻机是分层的。

    冻结 cgroup 会冻结属于该 cgroup 及其所有后代 cgroup 的所有任务。
    每个 cgroup 都有自己的状态(self-state)和从父级继承的状态(parent-state)。
    如果两种状态都已解冻,则 cgroup 已解冻。

    CGroup Freezer 状态:

    freezer.state 仅在非根 cgroup 中可用,并且具有三个可能的值:

    • FROZEN — cgroup 中的任务已暂停。
    • FREEZING — 系统正在暂停 cgroup 中的任务。
    • THAWED — cgroup 中的任务已恢复。

    含义(here):

    freezer 子系统用于暂停和恢复 cgroup 中的进程。

    Freezer有一个控制文件:freezer.state,写FROZEN到这个文件,可以挂起cgroup中的进程,写THAWED到这个文件,可以恢复挂起的进程。

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 2017-09-29
      • 1970-01-01
      • 2015-05-24
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2016-04-21
      相关资源
      最近更新 更多