3 votos

¿Cómo realizar un reinicio en caliente utilizando el emulador de terminal?

¿Cómo puedo realizar un reinicio en caliente en mi dispositivo utilizando el emulador de terminal? No tengo busybox instalado, pero mi teléfono está rooteado.

EDIT: Estoy buscando una solución para realizar un reinicio en caliente(ver Pregunta rápida - Reinicio en caliente - Android ) utilizando el emulador de terminal/shell.

0 votos

su -c killall system_server

1 votos

Gracias, el comando ha funcionado. Puedes publicarlo como una respuesta, para que pueda upvote y aceptarlo?

6voto

Jack Wade Puntos 231

Mientras que el otra respuesta establece correctamente una forma de forzar un reinicio (muy) suave, me gustaría añadir algunos detalles en profundidad (que pueden no tener sentido para todos :).

¿QUÉ ES EL REINICIO CALIENTE / TIBIO?

Para responder a tu pregunta tenemos que definir qué es un reinicio en caliente (o caliente) en un dispositivo Android. Los términos arranque en frío (o duro) y arranque en caliente (o suave) se asocian más a los PC, especialmente a Windows. En el caso de los teléfonos móviles o los dispositivos integrados es difícil trazar una línea clara entre el arranque en frío y en caliente. En el caso de reinicio en frío En la mayoría de los casos, se corta la alimentación de las CPUs, y también posiblemente de la RAM e incluso de toda la placa base. Reinicio suave sólo mata e inicia los procesos, conservando la energía de los componentes de hardware. La gestión de la energía forma parte del estándar ACPI/UEFI/BIOS de código abierto en los PC, mientras que en los teléfonos se suele utilizar el firmware PMIC con los SoC.

¿CÓMO FUNCIONA EL REBOOT EN ANDROID?

En el (re)arranque, el firmware del SoC carga cargadores de arranque en la memoria que luego cargan binarios ejecutables e inician procesos (el verdadero SO). De mi respuesta a ¿Cuál es la forma más rápida de apagar un teléfono Android no rooteado? : Android se basa en Núcleo de Linux - el primer ejecutable del sistema operativo que se ejecuta durante proceso de arranque . El núcleo inicializa el hardware necesario y prepara un entorno básico antes de ejecutar init - el primer proceso del espacio de usuario que podemos ver. Es init que luego se inicia y se encarga de todos los servicios y procesos.

A civilizado camino para hacer el reinicio o el apagado es dejar que todos los procesos terminen por sí mismos guardando cualquier trabajo pendiente, desmontar los sistemas de archivos y luego pedirle al kernel que invierta el proceso de arranque. init puede manejar esto en los sistemas operativos modernos o puede hacerlo manualmente a través de /proc/sysrq-trigger interfaz. O podemos pedir al kernel que realice un reinicio rápido matando todo. Sin embargo, esto puede causar la pérdida de datos, especialmente debido a la corrupción del sistema de archivos.

A brutal camino es la pulsación prolongada del botón de encendido (manejado por el PMIC) que es un reinicio en frío (o apagado) en el verdadero sentido porque la energía de las CPUs (y la RAM) se corta repentinamente sin esperar a que los procesos del espacio del usuario y el kernel terminen con gracia.

¿Realiza Android un reinicio en frío?

En los teléfonos Android (y en otros sistemas también) un reinicio normal no es completamente frío ya que la energía no se corta al menos a la memoria RAM porque tiene un área donde se almacenan los registros de pánico del kernel a los que se puede acceder en el siguiente arranque (consulte ramoops utilizado para last_kmsg o pstore ). Vea algunas otras pistas en cargador de arranque razón de arranque especificación . Del mismo modo, algunas otras regiones de memoria asignadas a los componentes del SoC y al firmware firmado que están aisladas del procesador de aplicaciones (AP en el que se ejecuta el SO principal) tampoco pueden ser borradas. Entre ellos se encuentran el procesador de banda base (módem), el procesador de señal digital (DSP), el módulo WiFi/BT, etc.

Sin embargo un reinicio normal tampoco es un reinicio en caliente. Durante el reinicio el kernel se suicida y entrega el control al gestor de arranque que puede arrancar el dispositivo en diferentes modos posibles ( fastboot /cargador de arranque, recuperación o arranque normal ). Los detalles de bajo nivel son específicos del proveedor y del hardware; si un dispositivo realiza un reinicio completo del encendido (PoR) o si el hardware no se reinicia en absoluto. Qué componentes se apagan durante los diferentes tipos de reinicios depende de la interacción entre el kernel, el cargador de arranque, el SoC, el PMIC, el hardware de vigilancia, etc.

¿CÓMO HACER UN REINICIO EN CALIENTE?

El kernel de Linux también soporta otra forma de reinicio en caliente: kexec . El kernel puede terminar los procesos del espacio de usuario y a sí mismo, ejecutando un nuevo kernel que luego puede iniciar el nuevo entorno del espacio de usuario sin hacer el reinicio del hardware, el POST y la reinicialización por el BIOS. Véase kexec-reboot por ejemplo. Sin embargo, el nuevo kernel tiene que considerar que los dispositivos de hardware no se reinician, por lo que no estarán en estado de salud . Este enfoque es teóricamente posible también en Android, es decir, el kernel se reejecuta a sí mismo con la línea de comandos adecuada y luego se inicia init . Pero requiere algunos cambios específicos del dispositivo en el kernel y la ROM. Ver un ejemplo de uso de kexecboot .

Android de serie no proporciona la funcionalidad de reinicio suave, pero algunas ROMs personalizadas implementan esta característica mediante la activación de reiniciar método de activity servicio . Esto mata zygote y sus procesos asociados, incluyendo wificond , netd , mediaserver , cameraserver , audioserver y algunos demonios de proveedores. Sin embargo, init y otros demonios centrales como ueventd , vold , installd , surfaceflinger , logd , servicemanager , healthd y una larga lista de demonios de proveedores no se reinician.

ActivityManagerService.restart requiere android.permission.SET_ACTIVITY_WATCHER y llama ActivityManagerService.shutdown que requiere android.permission.SHUTDOWN . Ambos permisos tienen Nivel de protección signature , por lo que las aplicaciones de terceros no pueden tenerlas. adb shell tampoco tiene la SHUTDOWN permiso, así que Se necesita root .

En el código de Android 9 para restart método es 179 para iniciar un reinicio suave:

~# service call activity 179

O puede pedir init para reiniciar zygote y los servicios dependientes (SELinux no permite que se establezca la propiedad, por lo que se requiere Root):

~# setprop ctl.restart zygote

También es posible reiniciar más init servicios de comamndline, o cambiar init para matar e iniciar todos los procesos del espacio de usuario en lugar de llamar al kernel al reiniciar. Depende de su propósito real de reinicio en caliente .

2voto

alecxs Puntos 29

Si el dispositivo está rooteado puede matar el proceso gui desde el shell Root, se reiniciará inmediatamente. la aplicación terminal y todos los subprocesos se matan también, pero los procesos del shell adb sobrevivirán. todos los montajes actuales permanecen intactos (incluso los montajes manuales) el dispositivo no se reinicia completamente

killall system_server

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