问题
做什么adb shell start
和adb shell stop
实际做什么?
描述
我认为他们调用/system/bin/start
and /system/bin/stop
。但是这两个可执行文件没有提供任何关于它们做什么的线索。在真机上测试时,我发现zygote进程启动和停止。所以这两个命令似乎控制了Android运行时(对应下图中的黄色和蓝色部分)。
但是这两个命令启动/停止了哪些确切的进程/服务?
基本上,您的所有 Android 服务都会重新启动;那些在SystemServer.java
. 这在“Zygote 的上下文”中被调用。所以是的,Zygote 停止了。
您在 Android 中注册的所有服务ServiceManager
都将在ServiceManager
. 要重新启动它们,请执行adb shell start
.
还要注意SystemServer
是由 Zygote 启动的,所以init.rc
告诉如果 Zygote 停止了,那么 evenSystemServer
必须停止。甚至SurfaceFlinger
死了,因为它是从SystemServer
本地开始的。
在您的设备上运行它
grep ^service /init*rc
我也一直想知道“停止”在 Android 上的作用。从“停止”停止由 SurfaceFlinger 渲染 AP 的人那里得知。
尝试使用如下命令。执行命令,等待几秒钟,然后在 Android 上执行“停止”。该命令不断打印增加的数量并创建 .txt 文件。所以也许它只会在 Linux 部分保持活动状态时停止 Android 部分。仅供参考。
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;'