2012-11-05 31 views
23

Domanda

Cosa fanno effettivamente adb shell start e adb shell stop?Cosa fa 'adb shell start/stop' fare?

Descrizione

penso che chiamano /system/bin/start e /system/bin/stop. Ma questi due eseguibili non danno alcun indizio su ciò che fanno. Quando testato su un dispositivo reale, ho trovato il processo di zigote avviato e fermato. Quindi questi due comandi sembrano controllare il runtime Android (che corrisponde alle parti gialle e blu nella figura sotto).

Android Architecture

Ma quello esatto processi/servizi vengono avviati/fermati con questi due comandi?

+0

fonte: https://android.googlesource.com/platform/system/core/+/brillo-m8-release/toolbox/start_stop.cpp –

risposta

1

Esegui questo sul vostro dispositivo

grep ^service /init*rc 
+0

Fino a poco tempo fa, uscite più ufficiale di Android non includono ' grep' –

+1

Usa 'adb pull' per copiare tutti quei file sulla tua workstation e poi eseguire grep da lì. –

+0

@ChrisStratton: compila/scarica 'busybox' ed esegui' busybox grep'. – pevik

9

In sostanza, tutti i servizi Android vengono riavviati; quelli creati e registrati in SystemServer.java. Questo è chiamato all'interno del "Contesto di Zygote". Quindi sì, lo Zigote viene fermato.

Tutti i servizi registrati con ServiceManager in Android verranno rimossi all'interno di ServiceManager. Per riavviarli, fare adb shell start.

Si noti inoltre che SystemServer è iniziata da Zygote, in modo init.rc dice che se Zygote viene arrestato, allora anche SystemServer deve essere fermato. Persino SurfaceFlinger muore, dal momento che è iniziato da SystemServer ma in modo nativo.

1

Mi sono chiesto cosa faccia "stop" anche su Android. Approvato da qualcuno che "stop" ferma il rendering di AP da SurfaceFlinger.

Aveva provato con il comando come di seguito. Esegui il comando, attendi qualche secondo e poi esegui "stop" su Android. Il comando continua a stampare un numero maggiore e a creare file .txt. Quindi forse si ferma solo la parte Android mentre la parte Linux rimane attiva. Solo FYI.

busybox sh -c 'i=0;while [ $i -ne 100 ]; do echo $i >> count.txt; sleep 1; i=$(($i + 1)); echo $i; touch "$i.txt"; done;'