# 简述
使用 Termux 安装 Proot Linux 发行版,用 RealVNC Viewer 登入系统,没过几秒就会收到 The connection closed unexpectedly 的警告!
接着回到 Termux,看到终端机显示 [Process completed (signal 9) - press Enter] 的错误,原来是 Termux 的行程被 Android 系统中止了,但是手机 RAM 明明还够用啊?
此问题源自于 Android 12 引入的新机制,下面简述原因,以及提供暂时的解决方法。
Termux 发生 signal 9 错误的原因:agnostic-apollo 在 Phantom, Cached And Empty Processes 一文中详述了 Android 12 引进的新机制。Android 系统将会监控 APP 所 fork 出来的子行程,并在达到 32 个以上子行程后将其终止,避免占用过多 CPU 资源。
此一机制称为 "Phantom Processes Killing",因为开发者最害怕看到这种情况,得名影子行程杀手。
在开发者要求下,Google 于 Android 12L 以及 Android 13 以上版本加入了关闭 Phantom Processes Killing 的选项 settings_enable_monitor_phantom_procs,然而使用者还是要手动使用 ADB 指令关闭。因此这是 Google Android 的问题,Temrux 开发者尚未找到正式解决办法,下面指令停用的办法是 agnostic-apollo 提出的。
以 Termux 来说,Phantom Processes Killing 会导致 Termux 执行指令的时候被系统随机中止。Proot distro 若要跑图形环境自然就会制造更多子行程了吧。尤其在切换到后台,要用 VNC Viewer 连线的时候,就会触发 Phantom Processes Killing,不管手机 RAM 有多大。接著回到 Termux 便会看到 [Process completed (signal 9) - press Enter] 的错误讯息。
解决 Termux 的 signal 9 错误执行指令将 Phantom Processes Killing 停用即可,虽然会导致某些 APP 的背景行程跟著不受控制。
以下假定 Android 手机皆有安装 Google Play 服务框架,因为 GMS 会不定时覆写装置设定,所以要一并将其关闭。然而关闭 GMS 覆写可能会导致手机卡开机。
# 如果手机没有 Root 权限
点击这里到 Android 官网下载 Windows 版的 Platform Tools 并且解压缩。
进入 platform_tools 目录,会看到 ADB 和 Fastboot 的执行档。在这里按 SHIFT + 右键,开启终端机 (或 Powershell)。
手机开启系统设定→关于手机,版本号码点 5 下,之后搜寻 “开发人员选项” 进去开启 “ADB 侦错”。
将手机插上电脑,于 Windows 的终端机输入以下指令,在手机上同意侦错。
./adb devices |
# 接著按照 Android 版本,执行以下指令
# Android 12L 和 Android 13:
./adb shell "settings put global settings_enable_monitor_phantom_procs false" |
# Android 12:
./adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent; /system/bin/device_config put activity_manager max_phantom_processes 2147483647" |
重开机,完成。
# 如果手机有 Root 权限
开启 Termux,切换到 su,取得 root 权限
su #取得 root 权限 |
按照 Android 版本执行指令。
# Android 12L 和 Android 13 以上:
su -c "settings put global settings_enable_monitor_phantom_procs false" |
# Android 12:
su -c "/system/bin/device_config set_sync_disabled_for_tests persistent; /system/bin/device_config put activity_manager max_phantom_processes 2147483647" |
重开机,完成。