NoActive 中文文档 下载 App

NoActive 四种冻结方式总览 - V2 / V1 / API / Kill 原理与选型

Linux 进程冻结的技术基础

要理解 NoActive 的冻结方式选择,需要先了解 Linux 提供的进程暂停机制。

Linux 提供了以下几种进程暂停执行方式:

机制类型原理
Kill -STOP (信号 19)信号发送停止信号,进程进入 T 状态
Kill -CONT (信号 18)信号发送继续信号
Cgroup Freezer V1Cgroup将进程加入 freezer cgroup,暂停调度
Cgroup Freezer V2Cgroupunified cgroup v2 控制
内核函数 cgroup_freeze内核直接调用内核冻结接口

Google 在 Android 中使用 Cgroup Freezer V2 作为官方推荐方案。

NoActive 的四种冻结方式

V2(推荐)

NoActive 首选的冻结方式,使用 Cgroup Freezer V2 机制。

优点:兼容性最好,效果最统一,符合 Android 官方设计。

适用:所有 5.0 及以上内核,5.10+ 推荐首选。

V1

NoActive 实现的 Cgroup Freezer V1 封装。

缺点:冻结父进程不会冻结子进程,存在内存泄露风险。

适用:4.19 内核的 MIUI/HyperOS/RealmeUI/ColorOS 设备(因厂商定制,V2 可能不生效)。

API

暂停执行已缓存的 API 变量。

缺点:不推荐使用,机制不稳定。

Kill

通过信号暂停进程。

优点:任何内核都支持,兼容性最佳。

缺点:内存达到一定程度会触发全解冻。Kill -19 和 Kill -20 各有差异,需要自测哪个有效。

选择推荐

内核 5.10+
  → V2(首选)

内核 4.19 + MIUI/HyperOS/RealmeUI/ColorOS
  → V1

其他内核(4.19 及以下非厂商定制)
  → Kill

以上都不生效
  → 尝试 V2(可能设备支持)→ 再不行用 Kill

冻结方式与内核模块的关系

内核模块的作用是让 NoActive 用户态代码能够访问内核的 Cgroup Freezer 接口。没有内核模块:

→ 深入了解 V2 冻结方式原理