31 votes

Quelle est la meilleure façon de redémarrer Android via la ligne de commande (à distance) ?

Je cherche le meilleur moyen de redémarrer mon appareil Android 4.1.1 enraciné. J'ai trouvé ces solutions jusqu'à présent :

  • su -c "reboot" - Provoque des problèmes de wifi après le redémarrage de mon appareil... J'ai lu que cela peut causer un système de fichiers endommagé dans certains cas... Ne fonctionne pas via ssh pour moi.
  • toolbox reboot - Mêmes soucis ici, mais fonctionne via ssh.
  • reboot -d 8 -f - cause des problèmes après le redémarrage, par exemple, certaines applications ne démarrent pas.
  • busybox killall system_server - "Hot Reboot" (pas vraiment un redémarrage du système)
  • start|stop - Démarre/arrête le Runtime Android (pas vraiment un redémarrage du système)

Que fait exactement l'appareil lorsque j'appuie sur le bouton d'alimentation (matériel) ? Je suppose que c'est le moyen le plus convivial.

0 votes

su -c "reboot" exécute le reboot qui est définie dans reboot.c . reboot.c n'a pas beaucoup changé au fil des ans. Il a toujours appelé sync() et ensuite redémarré l'appareil. Aussi, grâce à cet engagement les versions modernes de reboot.c démonte également tous les systèmes de fichiers. Android 4.1.1 inclut le commit que j'ai mentionné, et je ne vois donc pas comment su -c "reboot" sur Android 4.1.1 pourrait causer une corruption du système de fichiers.

0 votes

Cher acy : La réponse tardive de Firelord ( su -c 'am start -a android.intent.action.REBOOT' ) fonctionne pour moi sur Android 4.1.2, et me semble être la meilleure des réponses existantes. Si elle fonctionne pour vous sur Android 4.1.1, ou si vous êtes trop occupé pour l'essayer, veuillez cliquer sur la coche verte afin de la faire remonter en haut de la section des réponses.

17voto

Firelord Points 23064

Que fait exactement l'appareil lorsque j'appuie sur le bouton d'alimentation (matériel) ? Je suppose que c'est le moyen le plus convivial.

Une boîte de dialogue s'affiche avec une option de mise hors tension de l'appareil (Android standard ne propose pas de redémarrage). Il apparaît que ShutdownActivity est appelé lorsque vous appuyez longuement sur le bouton d'alimentation.

Quoi qu'il en soit, voici ce que vous pouvez essayer, à distance ou localement, mais uniquement avec un accès Root :

su -c 'am start -a android.intent.action.REBOOT'

Il effectuera un arrêt en douceur suivi d'un redémarrage. Je cherchais une intention quand je l'ai remarqué. aquí .

La méthode est testée sur Android 4.2.1, 5.0.2 et 6.0.1 et devrait fonctionner pour Android 4.1.1 également

Mise à jour

Testé sur Android 5.0 et 6.0.1 :

su -c 'svc power reboot'

Par le code source aquí Les versions KitKat devraient aussi supporter la commande.

1 votes

Exactement ce dont j'avais besoin. Je trouve tout de même étrange qu'il soit indiqué "Powering off..." alors qu'il y a des valeurs pour le texte de redémarrage.

14voto

Nick Pierpoint Points 7976

C'est simple, vraiment :

  • Android arrête en toute sécurité les parties vitales du runtime.
  • Le système d'exploitation diffuse également des intentions pour indiquer aux applications et aux services qu'ils doivent se fermer en douceur. Ceux-ci, à leur tour, vident leurs caches de toutes les données et préférences partagées, sauvegardent tout cela dans la base de données sqlite, et ainsi de suite.

En d'autres termes, les applications et les services ont la possibilité d'effectuer leur nettoyage de manière systématique.

Les commandements que vous avez essayés sont plus sévères. Elles contournent en fait les mécanismes de sécurité pour un arrêt en douceur.

Android n'est pas Linux en soi, dans le sens d'une version de bureau ordinaire de Linux où ces commandes pourraient être émises pour arrêter l'environnement Linux.

Il pourrait être possible de créer un script d'enveloppe tel que celui-ci :

#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot

Vous pouvez l'enregistrer comme safe_shutdown.sh avec l'autorisation de 0755. Votre kilométrage peut varier, selon les combinés et les ROMs - donc aucune garantie.

1 votes

Merci pour cette explication ! est-il possible de faire cela à distance, par exemple via ssh (pas adb) ?

4 votes

Je pense qu'il veut savoir comment il peut imiter l'arrêt du bouton avec une commande.

0 votes

Si c'est le moyen le plus convivial/le plus sûr/le plus efficace d'arrêter l'appareil, alors oui :)

11voto

Sauron Points 739
killall zygote

Cela va tuer la racine zygote et provoquer un rafraîchissement du système Android.

Cette opération ne redémarre pas le matériel de votre téléphone, mais uniquement les processus Android.

Par défaut (sous Linux), l'option kill / killall donnent aux processus une façon élégante de s'arrêter, bien que cela dépende de l'architecture du système. zygote La mise en œuvre de ce système permet d'arrêter les applications Android en cours.

Note : vous devez exécuter cette opération en tant que Root, que vous utilisiez la fonction su -c , connectez-vous via SSH ou ADB, ou une autre méthode.

Autres noms pour cette action :

  • redémarrage en douceur
  • redémarrage à chaud

0 votes

J'ai remarqué que sur certains appareils, le Wifi ne se reconnecte pas correctement après cette commande (je dois donc désactiver le Wifi, attendre une minute, puis réactiver le Wifi).

2 votes

Pour les lecteurs : Dans Lollipop, la façon standard de redémarrer le cadre Android est am restart . Cela nécessite cependant un accès Root.

0 votes

Fait killall zygote donner aux processus une façon élégante de s'arrêter ? Question intéressante. Quelqu'un devrait regarder le zygote code source afin de savoir.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X