当前位置:网站首页>SystemServer进程
SystemServer进程
2022-07-02 10:18:00 【xhBruce】
SystemServer进程
android12-release
Android系统启动
Zygote进程
Zygote进程fork而来
init进程 -> Zygote进程 -> system_server进程
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
frameworks/base/core/java/com/android/internal/os/Zygote.java
frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
art/runtime/native/dalvik_system_ZygoteHooks.cc
forkSystemServer().run() -> pid = Zygote.forkSystemServer() -> nativeForkSystemServer() -> com_android_internal_os_Zygote_nativeForkSystemServer -> pid = zygote::ForkCommon() -> pid = fork() -> SpecializeCommon()
/* Hardcoded command line to start the system server */
String[] args = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,"
+ "1024,1032,1065,3001,3002,3003,3006,3007,3009,3010,3011",
"--capabilities=" + capabilities + "," + capabilities,
"--nice-name=system_server",
"--runtime-args",
"--target-sdk-version=" + VMRuntime.SDK_VERSION_CUR_DEVELOPMENT,
"com.android.server.SystemServer",
};
ZygoteArguments parsedArgs;
SystemServer进程参数信息为uid=1000,gid=1000,进程名为
sytem_serverZygote.forkSystemServer()fork出system_server进程
com_android_internal_os_Zygote_nativeForkSystemServerJNIzygote::ForkCommon()调用到fork()创建新进程,采用copy on write方式,这是linux创建进程的标准方法,会有两次return。 返回值有3种类型:父进程中,fork返回新创建的子进程的pid;子进程中,fork返回0;当出现错误时,fork返回负数。
当system_server进程死亡后,重启zygote进程。新创建system_server进程已完成,
pid == 0便进入handleSystemServerProcess()方法
handleSystemServerProcess
fork()到此system_server进程已完成了创建的所有工作,接下来开始了system_server进程的真正工作
handleSystemServerProcess(parsedArgs)完成system_server进程剩余工作,运行在system_server进程Process.setArgV0(parsedArgs.mNiceName)当前进程名"system_server"performSystemServerDexOpt()执行dex优化操作,由installd来完成- system_server执行
ZygoteInit.zygoteInit()
/** * Finish remaining work for the newly forked system server process. */
private static Runnable handleSystemServerProcess(ZygoteArguments parsedArgs) {
// set umask to 0077 so new files and directories will default to owner-only permissions.
Os.umask(S_IRWXG | S_IRWXO);
if (parsedArgs.mNiceName != null) {
Process.setArgV0(parsedArgs.mNiceName);
}
final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH");
if (systemServerClasspath != null) {
performSystemServerDexOpt(systemServerClasspath);
// Capturing profiles is only supported for debug or eng builds since selinux normally
// prevents it.
if (shouldProfileSystemServer() && (Build.IS_USERDEBUG || Build.IS_ENG)) {
try {
Log.d(TAG, "Preparing system server profile");
prepareSystemServerProfile(systemServerClasspath);
} catch (Exception e) {
Log.wtf(TAG, "Failed to set up system server profile", e);
}
}
}
if (parsedArgs.mInvokeWith != null) {
String[] args = parsedArgs.mRemainingArgs;
// If we have a non-null system server class path, we'll have to duplicate the
// existing arguments and append the classpath to it. ART will handle the classpath
// correctly when we exec a new process.
if (systemServerClasspath != null) {
String[] amendedArgs = new String[args.length + 2];
amendedArgs[0] = "-cp";
amendedArgs[1] = systemServerClasspath;
System.arraycopy(args, 0, amendedArgs, 2, args.length);
args = amendedArgs;
}
WrapperInit.execApplication(parsedArgs.mInvokeWith,
parsedArgs.mNiceName, parsedArgs.mTargetSdkVersion,
VMRuntime.getCurrentInstructionSet(), null, args);
throw new IllegalStateException("Unexpected return from WrapperInit.execApplication");
} else {
ClassLoader cl = getOrCreateSystemServerClassLoader();
if (cl != null) {
Thread.currentThread().setContextClassLoader(cl);
}
/* * Pass the remaining arguments to SystemServer. */
return ZygoteInit.zygoteInit(parsedArgs.mTargetSdkVersion,
parsedArgs.mDisabledCompatChanges,
parsedArgs.mRemainingArgs, cl);
}
/* should never reach here */
}
ZygoteInit.zygoteInit()
ZygoteInit.nativeZygoteInit()在AndroidRuntime.cpp中,进行了jni映射RuntimeInit.applicationInit()中内部类MethodAndArgsCaller.run运行mMethod.invoke()启动SystemServer.main()
SystemServer.main
4.2 系统服务:由SystemServer.java负责启动和管理整个Java framework中服务startBootstrapServices、startCoreServices、startOtherServices
时序图

边栏推荐
- JS逆向之行行查data解密
- Dingtalk send message
- 能自动更新的万能周报模板,有手就会用!
- D language, possible 'string plug-ins'
- P3807 [template] Lucas theorem /lucas theorem
- Solve "sub number integer", "jump happily", "turn on the light"
- P3008 [USACO11JAN]Roads and Planes G (SPFA + SLF优化)
- Android kotlin fragment technology point
- 错误:EACCES:权限被拒绝,访问“/usr/lib/node_modules”
- [youcans' image processing learning course] general contents
猜你喜欢

(POJ - 1984) navigation nightare (weighted and search set)

题解《子数整数》、《欢乐地跳》、《开灯》

Unity skframework framework (XII), score scoring module

Common options of tcpdump command: Three

Gee learning notes 2

OpenApi-Generator:简化RESTful API开发流程

Just 1000 fans, record it
![[技术发展-22]:网络与通信技术的应用与发展快速概览-2- 通信技术](/img/a7/44609a5acf25021f1fca566c3d8c90.png)
[技术发展-22]:网络与通信技术的应用与发展快速概览-2- 通信技术

ensp简单入门
![[true topic of the Blue Bridge Cup trials 43] scratch space flight children's programming explanation of the true topic of the Blue Bridge Cup trials](/img/42/21f6d0fdd159faa8b63713624c95a2.png)
[true topic of the Blue Bridge Cup trials 43] scratch space flight children's programming explanation of the true topic of the Blue Bridge Cup trials
随机推荐
BeanUtils--浅拷贝--实例/原理
免费SSL证书知多少?免费SSL证书和收费SSL证书的区别
mac(macos Monterey12.2 m1) 个人使用php开发
Download files and preview pictures
Explanation of 34 common terms on the Internet
Explanation: here is your UFO, Goldbach conjecture
诚邀青年创作者,一起在元宇宙里与投资人、创业者交流人生如何做选择……...
Numpy array calculation
(POJ - 1984) navigation nightare (weighted and search set)
研究表明“气味相投”更易成为朋友
二、帧模式 MPLS 操作
Countermeasures for the failure of MMPV billing period caused by negative inventory of materials in SAP mm
Gee learning notes 2
Node. JS accessing PostgreSQL database through ODBC
【文档树、设置】字体变小
[true topic of the Blue Bridge Cup trials 43] scratch space flight children's programming explanation of the true topic of the Blue Bridge Cup trials
D为何链接不了dll
Answer: can the audio be set to on by default during easydss video on demand?
ensp简单入门
Achievements in science and Technology (27)