Bootstrap

Android11 SystemServer 启动分析

SystemServer 源码的位置在frameworks/base/services/java/com/android/server/SystemServer.java。

SystemServer.java 定义有 public static void main(String[] args) 方法 ,

我们在 frameworks 下 grep SystemServer ,发现在
com.android.internal.os.ZygoteInit#forkSystemServer 有对 SystemServer 的引用,

以下是流程:
Zygote 启动的时候,如果启动参数有 start-system-server,则会调用 com.android.internal.os.ZygoteInit#forkSystemServer 。
然后 com.android.internal.os.ZygoteInit#forkSystemServer 到
com.android.internal.os.Zygote#forkSystemServer 到
com_android_internal_os_Zygote.cpp#com_android_internal_os_Zygote_nativeForkSystemServer 调用
SpecializeCommon函数来fork SystemServer进程 ,
同时记录SystemServer 的进程的pid到gSystemServerPid .
通过系统调用 sigaction 来监听子进程的退出状态,如果发现是 SystemServer 进程退出,则把 Zygote 自身也kill。

欢迎评论。

;