快轉到主要內容

Termux崩潰 [Process completed (signal 9)] 錯誤的解決方法

智慧型手機 Termux教學
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

🇺🇸 English version

使用Termux安裝Proot Linux發行版,用RealVNC Viewer登入系統,沒過幾秒就會收到The connection closed unexpectedly的警告!

接著回到Termux,看到終端機顯示[Process completed (signal 9) - press Enter]的錯誤,原來是Termux的行程被Android系統中止了,但是手機RAM明明還夠用啊?

此問題源自於Android 12引入的新機制,下面簡述原因,以及提供暫時的解決方法。

1. 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]的錯誤訊息。

2. 解決Termux的signal 9錯誤
#

要解決Termux的崩潰問題,執行指令將Phantom Processes Killing停用即可,雖然會導致某些APP的背景行程跟著不受控制。

大部分Android手機皆有安裝Google Play服務框架,因為GMS會不定時覆寫裝置設定,所以要一併將其關閉。然而關閉GMS覆寫可能會導致手機卡開機,風險自負。

影片版教學

2.1. 如果手機沒有Root權限
#

註:以下步驟需要用到電腦,如果沒有電腦可以嘗試用 Termux進行無線ADB偵錯

  1. Android官網下載Windows版的Platform Tools,解壓縮

  2. 進入platform_tools目錄,會看到ADB和Fastboot的執行檔。在這裡按SHIFT + 右鍵,開啟終端機(或Powershell)。

  3. 手機開啟系統設定→關於手機,版本號碼點5下,之後搜尋「開發人員選項」進去開啟「ADB偵錯」。

  4. 將手機插上電腦,於Windows的終端機輸入以下指令,在手機上同意偵錯。

./adb devices
  1. 接著按照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"
  1. 重開機,完成。

2.2. 如果手機有Root權限
#

  1. 開啟Termux,切換到su,取得root權限
su
  1. 按照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"
  1. 重開機,完成。

相關文章

用Proot-Exagear在Android手機上跑Windows exe程式
智慧型手機 Termux教學 ExaGear Wine QEMU User Mode
Android手機拍攝AVIF/HEIF相片,利用Termux-camera
智慧型手機 Termux教學 AOMedia Video 1
Android手機免root跑Docker,安裝Linux QEMU虛擬機
智慧型手機 Termux教學 QEMU Docker Alpine Linux Android

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。