Οι νέοι περιορισμοί εφαρμογών παρασκηνίου του Android 12 θα μπορούσαν να αποτελέσουν μεγάλο πονοκέφαλο για τους ισχυρούς χρήστες

Οι νέοι περιορισμοί εφαρμογών παρασκηνίου του Android 12 θα μπορούσαν να είναι ένας μεγάλος πονοκέφαλος για τους ισχυρούς χρήστες που χρησιμοποιούν εφαρμογές όπως το Termux και ίσως ακόμη και το Tasker.

Android 12 έχει εισαγάγει πολλές αλλαγές, αν και δεν είναι όλες πραγματικά αντιμέτωπες με τον χρήστη. Χαρακτηριστικά όπως το τεράστιο υλικό που επανασχεδιάζετε είναι προφανώς χωμένα στο πρόσωπό σας και είναι δύσκολο να χάσετε, αλλά κάτι σαν Ψηφιακό κλειδί αυτοκινήτου υποστήριξη μπορεί να είναι πιο εύκολο να χαθεί. Ωστόσο, μια αλλαγή που μπορεί ακόμη και να είναι εντελώς αθέμιτη θα προκαλέσει τον όλεθρο σε εφαρμογές όπως το Termux και αυτή είναι η εισαγωγή ενός αρκετά επιθετικού δολοφόνου διεργασιών στο παρασκήνιο.

Για το περιβάλλον, το Termux είναι ένας εξομοιωτής τερματικού Linux που μπορείτε να αποκτήσετε στο Android και στη διαχείριση πακέτων του Termux Το σύστημα μοιάζει πολύ με το Advanced Package Tool (APT) του Debian, καθώς μπορείτε να αναζητήσετε, να εγκαταστήσετε και να απεγκαταστήσετε με το εντολή

κατάλληλος. Το Termux εγκαθιστά μόνο μερικά βασικά πακέτα εκτός συσκευασίας, για να μειώσει το μέγεθος APK στο Play Store, αλλά σας επιτρέπει να εγκαταστήστε τυχόν επιπλέον πακέτα που επιθυμείς. Οι χρήστες συχνά χρησιμοποιούν το Termux για να μετατρέψουν παλαιότερα smartphone σε μίνι διακομιστές ή το χρησιμοποιούν για να τρέξουν άλλα προγράμματα που συνήθως δεν απευθύνονται σε smartphone. Μια κοινή χρήση είναι ακόμη και η εγγενής ρύθμιση του youtube-dl, καθώς μπορείτε να εκτελέσετε σενάρια Python χρησιμοποιώντας το Termux στο smartphone σας.

Στο Android 12, όμως, ανακαλύφθηκε ότι ένας μηχανισμός παρακολούθησης διχαλωμένων θυγατρικών διεργασιών που ξεκινούν από εφαρμογές και τις σκοτώνει εάν καταναλώνουν υπερβολική ποσότητα CPU, εάν η εφαρμογή βρίσκεται στο παρασκήνιο (μέσω Μισάαλ Ραχμάν) εισήχθη. Περιορίζει επίσης τον αριθμό των θυγατρικών διεργασιών που μπορούν να δημιουργήσουν οι γονικές διεργασίες σε 32, γεγονός που περιορίζει σημαντικά τον αριθμό των λειτουργιών που μπορεί να ολοκληρώσει μια εφαρμογή στο παρασκήνιο. Αυτό το όριο των 32 θυγατρικών διεργασιών ισχύει στην πραγματικότητα σε ολόκληρο το σύστημα, όχι μόνο ανά εφαρμογή, πράγμα που σημαίνει ότι και άλλες εφαρμογές με θυγατρικές διεργασίες θα συμβάλλουν επίσης σε αυτό το όριο. Δοκίμασα στο Google Pixel 6 Pro και μπορώ να επιβεβαιώσω ότι PhantomProcessKiller υπάρχει και μπορεί ενδεχομένως να προκαλέσει τον όλεθρο στο Termux.

Το Phantom Process Killer του Android 12 σκοτώνει τις διεργασίες στο παρασκήνιο

Το Android 12 εισήγαγε μερικούς περιορισμούς στις διαδικασίες παρασκηνίου. Το πρώτο είναι ότι οι θυγατρικές διεργασίες εφαρμογών που καταναλώνουν πάρα πολύ CPU στο παρασκήνιο θα σκοτωθούν εάν η γονική διαδικασία βρίσκεται επίσης στο παρασκήνιο. Ο δεύτερος περιορισμός που εισάγεται είναι ένα όριο στον αριθμό των θυγατρικών διεργασιών που μπορούν να είναι ενεργές ανά πάσα στιγμή. Από το διαπράττουν ιστορία, φαίνεται ότι η Google προσπαθούσε να περιορίσει τις αδίστακτες διαδικασίες παρασκηνίου.

"Οι εφαρμογές θα μπορούσαν να χρησιμοποιήσουν το Runtime.exec() για να δημιουργήσουν θυγατρική διαδικασία και το πλαίσιο δεν θα έχει ιδέα για τον κύκλο ζωής του. Τώρα παρακολουθείτε αυτές τις διεργασίες όποτε τις βρίσκουμε - αυτή τη στιγμή κατά τη δειγματοληψία στατιστικών στοιχείων της CPU θα μπορούσαν να εντοπιστούν. Εάν καταναλώνει πάρα πολύ CPU ενώ η διαδικασία γονικής εφαρμογής είναι επίσης στο παρασκήνιο, σκοτώστε την. Από προεπιλογή επιτρέπουμε έως και 32 τέτοιες διαδικασίες. η διαδικασία με τη χειρότερη βαθμολογία oom adj των γονιών τους θα σκοτωθεί αν είναι πάρα πολλοί».

Φυσικά, τα smartphone Android είναι ήδη διαβόητα για τη χρήση εφαρμογών στο παρασκήνιο. Σχεδόν όλοι οι μεγάλοι OEM ασχολούνται με αυτό με κάποιο τρόπο, σχήμα ή μορφή, όπως και οι εταιρείες Η OnePlus, η Samsung και η Xiaomi θεωρούνται από τις χειρότερες. Ενώ το AOSP έχει ορισμένους περιορισμούς εφαρμογών στο παρασκήνιο, είναι χαρακτηριστικό των κατασκευαστών να δημιουργούν τους δικούς τους περιορισμούς πάνω από το AOSP. Ωστόσο, αυτοί είναι αρκετά αυστηροί περιορισμοί για τους δυναμικούς χρήστες και ενθαρρύνουν συμπεριφορές στις οποίες οι δυναμικοί χρήστες αντιτίθενται έντονα εδώ και πολύ καιρό. Ίσως αυξήσει τη διάρκεια ζωής της μπαταρίας μακροπρόθεσμα, αλλά φαινομενικά δεν υπάρχει τρόπος να το απενεργοποιήσετε.

Ενεργοποίηση του Android 12 Phantom Process Killer

Όπως λέει η δέσμευση, επιτρέπονται 32 τέτοιες διεργασίες και το επιβεβαίωσα στο Google Pixel 6 Pro με την ακόλουθη εντολή.

adb shell "/system/bin/dumpsys activity settings"

Στην έξοδο αυτής της εντολής, υπάρχει μια σταθερά που ονομάζεται "max_phantom_processes" με τιμή 32. Σε αυτό το πλαίσιο, μια «διαδικασία φάντασμα» κρίνεται από το σύστημα Android ως μια θυγατρική διαδικασία που εκτελείται στο παρασκήνιο. Εάν διαθέτετε συσκευή Android 12, μπορείτε να χρησιμοποιήσετε το Termux για να δημιουργήσετε περισσότερες από 32 θυγατρικές διεργασίες δημιουργώντας ένα σενάριο bash κάπου στον αποθηκευτικό χώρο σας που περιέχει τον ακόλουθο κώδικα και εκτελώντας το (πιστώσεις προς αγνωστικιστής-απόλλων στο GitHub, έναν προγραμματιστή που ασχολείται με το Termux):

for i in $(seq 40); do
sha256sum /dev/zero &
done

Για να το εκτελέσετε, στο Termux μεταβείτε στον φάκελο στον οποίο αποθηκεύσατε το σενάριο και πληκτρολογήστε τα εξής:

shfilename.sh

Εάν το τηλέφωνό σας αρχίζει να καθυστερεί, τότε αυτό σημαίνει ότι λειτουργεί. Ο παραπάνω κώδικας δημιουργεί 40 πράξεις sha256sum στο παρασκήνιο (που υποδηλώνονται με το συμπλεκτικό σύμβολο) λαμβάνοντας το /dev/zero αρχείο ως είσοδο. Το sha256sum θα δώσει τον κατακερματισμό SHA-256 οποιουδήποτε αρχείου δίνεται ως είσοδος. Ο λόγος /dev/zero χρησιμοποιείται είναι ότι είναι ένα αρχείο απεριόριστου μήκους που περιέχει μηδενικές τιμές για όσο διάστημα διαβάζεται, πράγμα που σημαίνει ότι το Η λειτουργία sha256sum δεν θα φτάσει ποτέ στο τέλος του αρχείου, χρησιμεύοντας ως ένα καλό τεστ αντοχής για τη διασφάλιση συνεχούς παρασκηνίου επιχειρήσεις.

Μετά από μερικά δευτερόλεπτα έως ένα λεπτό, ενδέχεται να εμφανιστούν τα ακόλουθα:

Το "σήμα 9" είναι ένα σήμα που αποστέλλεται στη διαδικασία που την αναγκάζει να τερματιστεί και αυτό το σήμα αποστέλλεται από τον προγραμματιστή Linux. Ο λόγος για τον οποίο εμφανίζεται το μήνυμα είναι ότι το τερματικό bash είναι τεχνικά μια παιδική διαδικασία του Termux και το Android 12 καταλήγει να σκοτώνει το τερματικό bash στην παραπάνω επίδειξη. Στην έξοδο logcat, μπορείτε να δείτε τα εξής:

11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {414579a 27434:27269:top/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237} died
11-02 13:01:52.512 1444 1764 I ActivityManager: Process PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340} died
11-02 13:01:52.517 1444 1764 I ActivityManager: Process PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340} died
11-02 13:01:52.519 1444 1764 I ActivityManager: Process PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340} died
11-02 13:01:52.532 1444 1764 I ActivityManager: Process PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340} died
11-02 13:01:52.545 1444 1764 I ActivityManager: Process PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340} died

Η σημαντική γραμμή είναι αυτή που αναφέρει ότι η διαδικασία "bash" κόπηκε και μετά πέθανε, και γι' αυτό το Termux σταματά να λειτουργεί. Αν και δεν είμαι σίγουρος τι είναι το "nightwatch.txt", μια πρόχειρη αναζήτηση στο Google φαίνεται να υποδηλώνει ότι σχετίζεται με το Facebook και το Facebook Messenger, δύο εφαρμογές που έχω εγκαταστήσει. Το δοκίμασα με την προσαρμοστική μπαταρία απενεργοποιημένη και βεβαιώθηκα ότι δεν υπήρχαν βελτιστοποιήσεις μπαταρίας που εφαρμόζονταν ούτε στο Termux.

Αφού ολοκληρώσετε τη δοκιμή, είναι πιθανό κάποιες από τις λειτουργίες sha256sum να συνεχιστούν στο παρασκήνιο ακόμα (και πατώντας enter θα κλείσει το Termux), οπότε ανοίξτε ξανά το Termux και πληκτρολογήστε το ΕΠΟΜΕΝΟ:

killall sha256sum

Ενώ ένας τέτοιος περιορισμός είναι λογικός για ορισμένες εφαρμογές, οι εφαρμογές που ενδέχεται να είναι πιο διατεθειμένοι να χρησιμοποιούν οι χρήστες (όπως το Termux) θα υποφέρουν. Αυτό μπορεί επίσης να έχει επίδραση σε άλλες εφαρμογές που χρησιμοποιούν επίσης οι ισχυροί χρήστες, όπως το Tasker. Είναι ένας περιορισμός που δεν φαίνεται ακόμη δυνατό να ξεπεραστεί και εισάγει ακόμη περισσότερους περιορισμούς στις εφαρμογές παρασκηνίου πέρα ​​από όλους τους άλλους αποκλειστικούς περιορισμούς που επιβάλλουν οι κατασκευαστές. Στο συνεχιζόμενο νήμα του ζητήματος του GitHub, αναφέρονται τα ακόλουθα από τον agnostic-apollo σχετικά με ένα logcat που τους εστάλη μέσω email:

"Και τα 32 παρακολουθούμενα logcat PhantomProcessRecord ανήκουν στο com.wsandroid.suite και το bash του termux ήταν μία από τις διαδικασίες που σκοτώθηκαν. Έτσι, όπως αναφέρθηκε παραπάνω, το όριο των 32 διεργασιών είναι για όλες τις εφαρμογές συνδυαστικά"

Περιέργως, έκανα τις ίδιες δοκιμές σε ένα Xiaomi 11T Pro με Android 11 και επιβεβαίωσα ότι η συμπεριφορά δεν υπάρχει στη συγκεκριμένη συσκευή σε αυτήν τη διαμόρφωση, παρόλο που οι συσκευές Xiaomi είναι διαβόητες για εφαρμογές φόντου περιορισμούς. Αυτή είναι, παραδόξως, μια από τις πιο αυστηρές πολιτικές διαχείρισης εφαρμογών παρασκηνίου που έχουν εισαχθεί σε οποιοδήποτε smartphone Android, καθώς δεν υπάρχει τρόπος να το παρακάμψετε. Ακόμη και σε συσκευές Xiaomi και συσκευές OnePlus, είναι δυνατή η απενεργοποίηση πλέον από αυτό, και για μερικούς ανθρώπους, η απενεργοποίηση όλων των βελτιστοποιήσεων μπαταρίας σε αυτές τις συσκευές είναι αρκετή για να είναι ευχαριστημένοι. Ο δολοφόνος διαδικασίας φαντασίας, αντίθετα, δεν μπορεί καν να απενεργοποιηθεί.

Εάν βασίζεστε στο Termux για πολλές λειτουργίες στη συσκευή που είναι εντατικές με πολλές διαδικασίες στο παρασκήνιο, ίσως αξίζει να σταματήσετε την αναβάθμιση προς το παρόν μέχρι να υπάρξουν περισσότερες πληροφορίες. Εάν δεν είστε ισχυρός χρήστης, τότε αυτό πιθανότατα δεν είναι κάτι για το οποίο πρέπει πραγματικά να ανησυχείτε.