【系统之音】应用程序进程启动流程--草稿
作者:互联网
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