目录
1.1.3 ZygoteHooks.nativePreFork
1.2.2 zygote.callPostForkChildHooks
前言
SystemServer就是系统用来启动Framework核心service的入口,如AMS,PMS,WMS等。
Android系统在启动的时候, 在启动两个重要的进程,一个是zygote进程
另一个是由zygote进程fork出来的system_server进程;
/frameworks/base/core/java/com/android/internal/os/
- ZygoteInit.java
- RuntimeInit.java
- Zygote.java
/frameworks/base/core/services/java/com/android/server/
- SystemServer.java
/frameworks/base/core/jni/
- com_android_internal_os_Zygote.cpp
- AndroidRuntime.cpp
/frameworks/base/cmds/app_process/App_main.cpp
一、 systemserver进程创建
//ZygoteInit.java
ZygoteInit.main(){
.....
if (startSystemServer) { //如果参数中包含“start-system-server”就是true
startSystemServer(abiList, socketName);
}
}
private static boolean startSystemServer(String abiList, String socketName, ZygoteServer zygoteServer)
throws Zygote.MethodAndArgsCaller, RuntimeException {
......
//准备参数, 其中进程名称为system_server
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,1032,3001,3002,3003,3006,3007,3009,3010",
"--capabilities=" + capabilities + "," + capabilities,
"--nice-name=system_server",
"--runtime-args",
"com.android.server.SystemServer",
};
ZygoteConnection.Arguments parsedArgs = null;
int pid;
try {
parsedArgs = new ZygoteConnection.Arguments(args);
//通过fork创建子进程
pid = Zygote.forkSystemServer(
parsedArgs.uid, parsedArgs.gid,
parsedArgs.gids,
parsedArgs.debugFlags,
null,
parsedArgs.permittedCapabilities,
parsedArgs.effectiveCapabilities);
} catch (IllegalArgumentException ex) {
throw new RuntimeException(ex);
}
/* For child process */
if (pid == 0) {
if (hasSecondZygote(abiList)) {
waitForSecondaryZygote(socketName);
}
//因为zygote进程socket创建, 子进程就要关闭,否则ams的socket请求就会错乱;
zygoteServer.closeServerSocket();
//子进程返回pid = 0 ,后续启动服务
handleSystemServerProcess(parsedArgs);
}
return true;
}
1.1 Zygote.forkSystemServer
//该函数分为三阶段处理preFork、nativeForkAndSpecialize、postForkCommon。
//VM_HOOKS是Zygote对象的静态成员变量:VM_H

SystemServer是Android启动的核心服务入口,由Zygote进程fork出来。在ZygoteInit.java中,通过startSystemServer方法触发创建。该过程涉及Zygote.forkSystemServer,包括preFork、nativeForkAndSpecialize、postForkCommon三个阶段,以及ZygoteHooks和Daemons类的角色。在Fork过程中,创建了新的子进程并初始化了相关线程和权限设置。
最低0.47元/天 解锁文章
1333

被折叠的 条评论
为什么被折叠?



