2012-11-05 20 views
23

Frage

Was machen adb shell start und adb shell stop eigentlich?Was macht 'adb shell start/stop'?

Beschreibung

Ich glaube, sie nennen /system/bin/start und /system/bin/stop. Aber diese zwei ausführbaren Dateien geben keine Ahnung von dem, was sie tun. Beim Testen auf einem echten Gerät habe ich festgestellt, dass der Zygote-Prozess gestartet und gestoppt wurde. Diese beiden Befehle scheinen also die Android-Laufzeit zu steuern (was den gelben und blauen Teilen in der folgenden Abbildung entspricht).

Android Architecture

Aber welche genaue Prozesse/Services gestartet/gestoppt mit diesen beiden Befehle?

+0

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

Antwort

1

Führen Sie dieses auf Ihrem Gerät

grep ^service /init*rc 
+0

Bis vor kurzem die meisten offiziellen Android-Versionen nicht enthalten ' grep' –

+1

Verwenden Sie 'adb pull', um alle diese Dateien auf Ihre Arbeitsstation zu kopieren und führen Sie dann grep von dort aus. –

+0

@ChrisStratton: kompilieren/herunterladen 'busybox' und führen' busybox grep'. – pevik

9

Grundsätzlich sind alle Android-Dienste neu gestartet werden; diejenigen, die in SystemServer.java erstellt und registriert sind. Dies wird im "Context of Zygote" genannt. Also ja, Zygote ist gestoppt.

Alle Ihre mit ServiceManager in Android registrierten Dienste werden innerhalb von ServiceManager entfernt. Um sie neu zu starten, tun Sie adb shell start.

Beachten Sie auch, dass SystemServer von Zygote gestartet wird, also init.rc besagt, dass, wenn Zygote gestoppt ist, auch SystemServer gestoppt werden muss. Selbst SurfaceFlinger stirbt, seit es von SystemServer aber nativ gestartet wird.

1

Ich habe mich gefragt, was "stop" auch auf Android tut. Von jemandem gelernt, der "Stop" hält, wird AP von SurfaceFlinger gerendert.

Hatte einen Versuch mit dem Befehl wie folgt. Führe den Befehl aus, warte ein paar Sekunden und führe "stop" auf Android aus. Der Befehl druckt die erhöhte Anzahl und erstellt TXT-Dateien. Vielleicht stoppt es nur den Android-Teil, während der Linux-Teil aktiv bleibt. Nur zu deiner Information.

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;'