Android 系统启动(一)---fork机制
fork() 机制
父进程通过 fork() 可以孵化出一个子进程。相当于是一个进程变成了两个进程。同时具有以下特点:
- 这两个进程代码一致,而且代码执行到的位置也一致。
- 区别是进程ID(PID)不一样。
- 一次调用,两次返回。父进程返回的是子进程的 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机制相关推荐
- Android 系统启动过程
文章来源于网络,心得来源于整理. 请尊重作者:http://hi.baidu.com/guoxiaoming/blog/item/24e9e9f8c9628f1fd9f9fd89.html/cmtid ...
- Android系统启动-zygote篇
基于Android 6.0的源码剖析, 分析Android启动过程的Zygote进程 /frameworks/base/cmds/app_process/App_main.cpp (内含AppRunt ...
- android 重启app_[Boot]Android系统启动-zygote篇
本文转载自Gityuan的博客,原文地址为:http://gityuan.com/2016/02/13/android-zygote/ 转载请注明作者及原文链接. 基于Android 6.0的源码剖析 ...
- Android开发——Android系统启动以及APK安装、启动过程
0. 前言 从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1. 系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被 ...
- Android系统启动过程
Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用. 启动 ...
- 详解 Android 系统启动流程
系统启动流程大致分以下五步: Loader(加载引导程序Boot Loader) Kernel(Linux内核层) Native(init进程) Framework(Zygote进程/SystemSe ...
- (连载)Android系统源码分析--Android系统启动流程之Linux内核
> **这是一个连载的博文系列,我将持续为大家提供尽可能透彻的Android源码分析 [github连载地址](https://github.com/foxleezh/AOSP/issues/3 ...
- Android系统启动流程—— init进程zygote进程SystemServer进程启动流程
原文地址:https://blog.csdn.net/qq_30993595/article/details/82714409 Android系统启动流程 Android系统启动过程往细了说可以分为5 ...
- 从源码解析-Android系统启动流程概述 init进程zygote进程SystemServer进程启动流程
Android系统启动流程 启动流程 Loader Kernel Native Framework Application init进程 启动 rc文件规则 Actions Commands Serv ...
最新文章
- 2021年大数据Flink(四十四):​​​​​​扩展阅读 End-to-End Exactly-Once
- 东方日升重磅推出白色双玻组件 助力推动度电成本下滑
- Freemaker FTL指令常用标签及语法
- vue-自主研发非父子关系组件之间通信的问题
- 通过FFMPEG代码学习函数指针和指针函数
- 人脸检测源码facedetection
- linux将一个文件的内容复制到另一个新的文件
- [SSH] 为 GitLab 帐号添加 SSH keys
- 交换芯片架构 (一)
- 如何撤销Word文档的只读模式
- 爱思唯尔(ELSEVIER)期刊LaTeX通用模板下载及使用技巧
- 程序员可以收藏的几个导航网站
- 从矿工到农民的失落感
- 招商银行信用卡中心18秋招题解
- STM32 CAN笔记(一)
- GBase项目管理实践总结——项目成本相关概念总结
- python读取dta文件并转化为dataframe
- 计算机毕业设计springboot+vue+elementUI幼儿园管理系统
- Chemdraw 打开分子后在手性中心边上出现abs标签,怎么去除?
- log4j -Dlog4j.configuration指定日志配置文件无法加载问题