禁用 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
Android Settings -> System -> Developer options -> Disable child process restrictions

这个方法有个限制,当你关闭开发者选项后,Disable child process restrictions 会被自动关闭。

在 Android 12L, 13 和更高版本中,执行下面的命令可以禁用 Phantom Processes Killer

1
2
root: su -c "settings put global settings_enable_monitor_phantom_procs false"
adb: adb shell "settings put global settings_enable_monitor_phantom_procs false"

升级 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
2
root: su -c "/system/bin/device_config put activity_manager max_phantom_processes 2147483647"
adb: adb shell "/system/bin/device_config put activity_manager max_phantom_processes 2147483647"

参考


禁用 Phantom Process Killer
https://usmacd.com/cn/andorid_disable_Phantom_Process_Killer/
作者
henices
发布于
2024年11月27日
许可协议