fork() 机制

父进程通过 fork() 可以孵化出一个子进程。相当于是一个进程变成了两个进程。同时具有以下特点:

  1. 这两个进程代码一致,而且代码执行到的位置也一致。
  2. 区别是进程ID(PID)不一样。
  3. 一次调用,两次返回。父进程返回的是子进程的 PID,从而让父进程可以跟踪子进程的状态,以子进程 PID 作为函数参数。子进程返回的是0。

举个实例

    private static boolean startSystemServer(String abiList, String socketName)throws MethodAndArgsCaller, RuntimeException {.....int pid;try {parsedArgs = new ZygoteConnection.Arguments(args);ZygoteConnection.applyDebuggerSystemProperty(parsedArgs);ZygoteConnection.applyInvokeWithSystemProperty(parsedArgs);/* Request to fork the system server process */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);}handleSystemServerProcess(parsedArgs);}return true;}
复制代码

Zygote 进程通过 forkSystemServer() 函数最终 fork 出来两个进程。父进程得到的变量 pid 为子进程的 PID,将直接 return true。然后通过 runSelectLoop(abiList); 方法进入一个死循环,成为一个守护进程,并且存在一个 Socket,用于后续响应其他指令。子进程得到的返回值变量 pid 为0,最终会执行 handleSystemServerProcess(parsedArgs);

Android 系统启动(一)---fork机制相关推荐

  1. Android 系统启动过程

    文章来源于网络,心得来源于整理. 请尊重作者:http://hi.baidu.com/guoxiaoming/blog/item/24e9e9f8c9628f1fd9f9fd89.html/cmtid ...

  2. Android系统启动-zygote篇

    基于Android 6.0的源码剖析, 分析Android启动过程的Zygote进程 /frameworks/base/cmds/app_process/App_main.cpp (内含AppRunt ...

  3. android 重启app_[Boot]Android系统启动-zygote篇

    本文转载自Gityuan的博客,原文地址为:http://gityuan.com/2016/02/13/android-zygote/ 转载请注明作者及原文链接. 基于Android 6.0的源码剖析 ...

  4. Android开发——Android系统启动以及APK安装、启动过程

    0. 前言   从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1.  系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被 ...

  5. Android系统启动过程

    Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动 ...

  6. 详解 Android 系统启动流程

    系统启动流程大致分以下五步: Loader(加载引导程序Boot Loader) Kernel(Linux内核层) Native(init进程) Framework(Zygote进程/SystemSe ...

  7. (连载)Android系统源码分析--Android系统启动流程之Linux内核

    > **这是一个连载的博文系列,我将持续为大家提供尽可能透彻的Android源码分析 [github连载地址](https://github.com/foxleezh/AOSP/issues/3 ...

  8. Android系统启动流程—— init进程zygote进程SystemServer进程启动流程

    原文地址:https://blog.csdn.net/qq_30993595/article/details/82714409 Android系统启动流程 Android系统启动过程往细了说可以分为5 ...

  9. 从源码解析-Android系统启动流程概述 init进程zygote进程SystemServer进程启动流程

    Android系统启动流程 启动流程 Loader Kernel Native Framework Application init进程 启动 rc文件规则 Actions Commands Serv ...

最新文章

  1. 2021年大数据Flink(四十四):​​​​​​扩展阅读 End-to-End Exactly-Once
  2. 东方日升重磅推出白色双玻组件 助力推动度电成本下滑
  3. Freemaker FTL指令常用标签及语法
  4. vue-自主研发非父子关系组件之间通信的问题
  5. 通过FFMPEG代码学习函数指针和指针函数
  6. 人脸检测源码facedetection
  7. linux将一个文件的内容复制到另一个新的文件
  8. [SSH] 为 GitLab 帐号添加 SSH keys
  9. 交换芯片架构 (一)
  10. 如何撤销Word文档的只读模式
  11. 爱思唯尔(ELSEVIER)期刊LaTeX通用模板下载及使用技巧
  12. 程序员可以收藏的几个导航网站
  13. 从矿工到农民的失落感
  14. 招商银行信用卡中心18秋招题解
  15. STM32 CAN笔记(一)
  16. GBase项目管理实践总结——项目成本相关概念总结
  17. python读取dta文件并转化为dataframe
  18. 计算机毕业设计springboot+vue+elementUI幼儿园管理系统
  19. Chemdraw 打开分子后在手性中心边上出现abs标签,怎么去除?
  20. log4j -Dlog4j.configuration指定日志配置文件无法加载问题

热门文章

  1. 《数据科学:R语言实现》——2.7 爬取网络数据
  2. 《计算机科学概论》—第2章2.2节位置记数法
  3. ThroughRain第一次冲刺(每天更新)
  4. 微软牛津计划-语音转文本-文本转语音代码和实现
  5. 下一代超大规模软件定义网络技术实践
  6. mysql查看连接数 (linux)
  7. 1010.在线视频—开源网管Nagios(三)使用Nagios监控服务器
  8. 各浏览器中for in顺序的差异
  9. G.703通道故障打环测试方法
  10. C#与Excel互操作