系统相关
首页 > 系统相关> > 【系统之音】应用程序进程启动流程--草稿

【系统之音】应用程序进程启动流程--草稿

作者:互联网

Zygote进程启动

 1 //=========ZygoteInit.java=====
 2 public static void main(String argv[]) {
 3       ZygoteServer zygoteServer = new ZygoteServer();
 4       ......
 5       String socketName = "zygote";
 6       ......
 7       //①创建一个名为“zygote”的Server端Socket,在后续会一直监听AMS发起的创建新进程的请求。该Socket全名为“ANDROID_SOCKET_zygote”,是在该方法中对socketName进行补全的。
 8       zygoteServer.registerServerSocketFromEnv(socketName);
 9       ......
10       //②通过fork方式创建SystemServer进程并启动
11       if (startSystemServer) {
12                 Runnable r = forkSystemServer(abiList, socketName, zygoteServer);
13                 ......
14                 if (r != null) {
15                     r.run();
16                     return;
17                 }
18             }
19        //③该方法中使用了一个while(true)的无限循环来实现一直监听AMS的请求
20        caller = zygoteServer.runSelectLoop(abiList);
21        ......
22 }

在注释②处讲到了“fork”,这里了解一下什么是fork

       

复刻(英语:fork,又译作派生、分支)是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。

       fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。

 

 

ss

标签:fork,--,......,应用程序,之音,zygote,进程,socketName,zygoteServer
来源: https://www.cnblogs.com/andy-songwei/p/13668909.html