cgroups的freeze和Linux命令“Kill - STOP pid”在Golang中有何区别?

3
我使用这个cgroups 包。
我对类型 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 中只有一个进程,使用这两种方式来暂停和恢复进程是否有区别?谢谢。

1个回答

0

这两种状态是在2016年10月引入的,containerd/cgroups commit b3f3344,并且涉及到cgroup v1 self-state

cgroup冻结是分层的。

冻结cgroup会冻结所有属于该cgroup及其后代cgroup的任务。
每个cgroup都有自己的状态(self-state)和从父级继承的状态(parent-state)。
当且仅当这两种状态都为THAWED时,cgroup才处于THAWED状态。

CGroup Freezer 状态:

freezer.state 仅在非 root cgroup 中可用,有三种可能的值:

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

意思(这里):

冷冻器子系统用于在cgroup中挂起和恢复进程。
冷冻器有一个控制文件:freezer.state,将FROZEN写入此文件,您可以暂停cgroup中的进程,并将THAWED写入此文件,您可以恢复已暂停的进程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接