Termux: διεργασίες στο παρασκήνιο και διακοπές Android — DedSec Project
Μία εργασία Termux μπορεί να σταματήσει χωρίς σφάλμα κώδικα Αναγνώρισε το είδος τερματισμού Το Android διαχειρίζεται εφαρμογές παρασκηνίου, κατανάλωση μπαταρίας και κύκλο ζωής διαφορετικά…
Μία εργασία Termux μπορεί να σταματήσει χωρίς σφάλμα κώδικα
Αναγνώρισε το είδος τερματισμού
Το Android διαχειρίζεται εφαρμογές παρασκηνίου, κατανάλωση μπαταρίας και κύκλο ζωής διαφορετικά από έναν Linux server. Αν η εργασία εξαφανίζεται μόλις κλείσει η οθόνη, μην υποθέτεις αμέσως ότι απέτυχε η Python. Κατάγραψε αν χάθηκε μόνο η συνεδρία του τερματικού, αν στάλθηκε σήμα στη διεργασία, αν εξαντλήθηκε η μνήμη ή αν το λειτουργικό περιόρισε την εφαρμογή. Μια διεργασία που τερματίζεται απότομα ίσως δεν προλάβει να γράψει log.
printf 'shell pid: %s\n' "$$"
ps -ef | head -25
printf 'time: '; date -Is
printf 'HOME=%s\n' "$HOME"
Σχεδίασε εργασίες που συνεχίζονται
Για μεγάλο audit χώρισε την είσοδο σε ανεξάρτητα batches. Μετά από κάθε πραγματικά ολοκληρωμένο βήμα γράψε μικρό αρχείο προόδου. Για ενημέρωση κατάστασης χρησιμοποίησε προσωρινό αρχείο στον ίδιο φάκελο και μετονομασία όταν είναι έτοιμο, αντί να αφήνεις μισογραμμένα δεδομένα. Ένα ZIP που υπάρχει στον δίσκο δεν σημαίνει απαραίτητα ότι ολοκληρώθηκε και ελέγχθηκε.
Έλεγξε τις ρυθμίσεις του Android
Δες τους περιορισμούς μπαταρίας για το συγκεκριμένο Termux build. Η δυνατότητα wake lock, όπου υποστηρίζεται, μπορεί να βοηθήσει σε θέματα sleep, δεν αποτελεί όμως υπόσχεση απεριόριστης λειτουργίας στο background. Η διατήρηση της εφαρμογής στο προσκήνιο είναι χρήσιμο πείραμα, όχι καθολική θεραπεία.
Τεστ που δίνει αποδείξεις
Ξεκίνα ακίνδυνη εργασία που γράφει αριθμημένα checkpoints. Άφησε τη συσκευή για προκαθορισμένο διάστημα και σύγκρινε το τελευταίο αποθηκευμένο βήμα με την αναμενόμενη πρόοδο. Κατάγραψε Android, προέλευση Termux και αν η διεργασία παρέμεινε ενεργή. Δεν χρειάζεται να απενεργοποιήσεις την ασφάλεια της συσκευής για να ελέγξεις αυτό το πρόβλημα.
Επανεκκινήσιμη εργασία αντί για υπόσχεση μόνιμου κελύφους
Ένα wake lock μπορεί να κρατήσει τη συσκευή ξύπνια σε ορισμένες περιπτώσεις, χωρίς ανοσία σε τερματισμό διεργασίας, περιορισμούς κατασκευαστή ή έλλειψη μνήμης. Θεώρησε τη μεγάλη εργασία κινητού διακόψιμη. Χώρισέ την σε αναγνωρίσιμα στοιχεία και αποθήκευσε επιβεβαίωση μετά την ασφαλή διατήρηση αποτελέσματος.
Στην επανεκτέλεση το αναγνωριστικό πρέπει να αποτρέπει διπλή επίδραση. Το τελευταίο τυπωμένο ποσοστό δεν αρκεί, επειδή τερματικό και μόνιμη έξοδος μπορεί να βρίσκονται σε διαφορετικά όρια. Το δείγμα μοντελοποιεί επαναλαμβανόμενη παράδοση με ολοκληρωμένα ID.
completed=set(); effects=[]
for item in ["a","b","a","c","b"]:
if item in completed: continue
effects.append(item)
completed.add(item)
assert effects == ["a","b","c"]
print("replayed items suppressed")
Η επίδειξη μνήμης δεν αποτελεί ανθεκτική αποθήκευση. Η πραγματική υλοποίηση δεσμεύει έξοδο και επιβεβαίωση μαζί ή κάνει την αντικατάσταση idempotent. Δοκίμασε τερματισμό ανάμεσα στις πράξεις σε αναλώσιμα δεδομένα και ανάφερε διακοπή χωρίς υπόσχεση μόνιμης εκτέλεσης.