31 votos

¿Cuál es la mejor manera de reiniciar Android a través de la línea de comandos (de forma remota)?

Estoy buscando la mejor / más amigable manera de reiniciar mi dispositivo Android 4.1.1 con root. Hasta ahora encontré estas soluciones:

  • su -c "reboot" - Causa problemas con el wifi después de reiniciar en mi dispositivo... Leí que esto puede causar un sistema de archivos corrupto en algunos casos... No funciona a través de ssh para mí.
  • toolbox reboot - Las mismas preocupaciones aquí, pero funciona a través de ssh.
  • reboot -d 8 -f - causa problemas después de reiniciar, por ejemplo, algunas aplicaciones no se iniciarán
  • busybox killall system_server - "Reinicio en caliente" (no realmente un reinicio del sistema)
  • start|stop - Inicia/detiene el Tiempo de Ejecución de Android (no realmente un reinicio del sistema)

¿Qué está haciendo exactamente el dispositivo cuando presiono el botón de encendido (hardware)? Supongo que esa es la manera más amigable.

0 votos

su -c "reboot" ejecuta el comando reboot, que está definido en reboot.c. reboot.c no ha cambiado mucho a lo largo de los años. Siempre ha llamado a sync() y luego reiniciado el dispositivo. Además, gracias a este commit, las versiones modernas de reboot.c también desmontan todos los sistemas de archivos. Android 4.1.1 incluye el commit que mencioné, por lo que no veo cómo su -c "reboot" en Android 4.1.1 podría causar corrupción del sistema de archivos.

0 votos

Querido acy: La respuesta tardía de Firelord (su -c 'am start -a android.intent.action.REBOOT') me funciona en Android 4.1.2, y me parece ser la mejor de las respuestas existentes. Si te funciona en Android 4.1.1, o si estás demasiado ocupado para probarlo, por favor haz clic en la marca de verificación verde para que flote en la parte superior de la sección de respuestas.

17voto

Firelord Puntos 161

¿Qué está haciendo exactamente el dispositivo cuando estoy presionando el botón de encendido (hardware)? Supongo que esa es la forma más amigable.

Aparece un diálogo con la opción de apagar el dispositivo (Android de fábrica no ofrece reinicio). Parece que se llama a ShutdownActivity cuando mantienes presionado el botón de encendido.

De todos modos, esto es lo que puedes intentar, de forma remota o local, pero solo con acceso root:

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

Hará un apagado y reinicio adecuados. Estaba buscando un intento cuando lo noté aquí.

El método se probó en Android 4.2.1, 5.0.2 y 6.0.1 y debería funcionar también para Android 4.1.1

Actualización

Probado en Android de fábrica 5.0 y 6.0.1:

su -c 'svc power reboot'

Según el código fuente aquí, las versiones KitKat también deberían admitir el comando.

14voto

Nick Pierpoint Puntos 7976

Simple, really:

  • Android está cerrando de forma segura partes vitales del tiempo de ejecución.
  • El sistema operativo también está enviando intents para indicar a las aplicaciones y servicios que se cierren de forma ordenada. Estos, a su vez, vacían sus cachés de todos los datos y preferencias compartidas, guardan lo que sea necesario en la base de datos sqlite, etc.

En otras palabras, se le está dando a las aplicaciones y servicios la oportunidad de realizar su limpieza de forma sistemática.

Los comandos que has intentado son más fuertes. En realidad, pasan por alto los mecanismos de seguridad para un apagado suave.

Android no es Linux en sí mismo, en el sentido de una versión de escritorio ordinaria de Linux donde esos comandos podrían emitirse para apagar el entorno de Linux.

Podría ser posible crear un script envolvente como este:

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

Puedes guardar esto como safe_shutdown.sh, con permisos de 0755. Tu experiencia puede variar, dependiendo de los teléfonos y ROMs — así que no hay garantías allí.

1 votos

¡Gracias por esta explicación! ¿Es posible hacer esto de forma remota, por ejemplo, a través de ssh (no adb)?

4 votos

Creo que él quiere saber cómo puede imitar el apagado del botón con un comando.

0 votos

Si esa es la forma más amigable/segura/mejor de apagar el dispositivo, entonces sí :)

11voto

palswim Puntos 141
killall zygote

Esto matará el proceso root zygote y causará una actualización del sistema Android.

Esto no reinicia el hardware de tu teléfono, solo los procesos de Android.

Por defecto (en Linux), los comandos kill/killall dan a los procesos una forma elegante de apagarse, aunque depende de la implementación de zygote si esto a su vez cierra de forma elegante tus aplicaciones de Android en ejecución.

Nota: debes ejecutar esto como root, ya sea que uses su -c, conectes vía SSH o ADB, u otro método.

Otros nombres para esta acción:

  • reinicio suave
  • reinicio en caliente

0 votos

He notado que en algunos dispositivos, el Wifi no se reconectará correctamente después de este comando (por lo que tengo que desactivar el Wifi, esperar un minuto y luego volver a activar el Wifi).

2 votos

Para los lectores: En Lollipop, la forma estándar de reiniciar el marco de Android es am restart. Sin embargo, esto requiere acceso root.

0 votos

¿Da killall zygote a los procesos una manera de apagarlos de forma graciosa? Interesante pregunta. Alguien tendría que revisar el código fuente de zygote para saberlo.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X