禁用 Phantom Process Killer
禁用 Phantom Process Killer
从 Android 12 开始,Google 引入了 Phantom Process Killer
机制,监控 app fork 出来的子进程,当子进程数大于 32 时,app 可能会被杀掉。
默认的 32 进程数是所有 apps 的限制,不是单个 app 的限制。
在 Android 14 或更高版本,可以在开发者选项中,禁用 Phantom Processes Killer
1 |
|
这个方法有个限制,当你关闭开发者选项后,Disable child process restrictions
会被自动关闭。
在 Android 12L, 13 和更高版本中,执行下面的命令可以禁用 Phantom Processes Killer
1 |
|
升级 ColorOS 15 后,发现 Termux 不能正常运行,在 Github 上的看到相关的 issue。
https://github.com/termux/termux-app/issues/4219
如果运行的进程超过32个,则 Termux 应用超出限制的进程即使禁用了该应用的电池优化也会被裁减掉(trim)。
由于限制是针对所有应用程序合计而言的,因此如果Termux尝试仅运行一个进程且处于后台状态,并且另一个(有bug)的应用正在运行≥ 32个进程,在杀掉这些进程时,如果其他应用的app进程oom adj值低于Termux app进程的oom adj值(而不是子进程中各自的oom adj值),那么单个Termux进程将首先被PhantomProcessList.trimPhantomProcessesIfNecessary()
方法裁剪。
ColorOS 15 后续的升级版本 303 ,修复了这个问题。
调整 Phantom Process
最大的进程数
如果期望调整 Phantom Process
最大的进程数(设置超过 32 的值)可以执行下面的命令
1 |
|