首页 > 系统相关 >Android fork 进程 process(init/Zygote/SystemServer)

Android fork 进程 process(init/Zygote/SystemServer)

时间:2024-08-25 14:54:29浏览次数:15  
标签:fork process Zygote blog init 进程 Android SystemServer

## Android的init/Zygote/SystemServer

  Android手机先开机,init/Zygote/SystemServer,然后启动Framework,然后启动Launcher;【安装APP(PMS),】然后启动APP(AMS)。所有的Android应用进程都是有Zygote进程fork出来的。

Android系统启动流程(一)解析init进程- http://blog.csdn.net/itachi85/article/details/54783506
Android系统进程Zygote启动过程的源代码分析- http://blog.csdn.net/luoshengyang/article/details/6768304
Framework启动过程浅析- https://blog.csdn.net/xsf50717/article/details/47167989
Android系统默认Home应用程序(Launcher)的启动过程源代码分析- http://blog.csdn.net/luoshengyang/article/details/6767736
Android应用程序安装过程(PMS)源代码分析- http://blog.csdn.net/luoshengyang/article/details/6766010
Android应用程序进程启动过程(AMS)的源代码分析- http://blog.csdn.net/luoshengyang/article/details/6747696

PackageManagerService启动流程源码解析- http://blog.csdn.net/u012124438/article/details/54882771
Android内核解读-应用的安装过程- http://blog.csdn.net/singwhatiwanna/article/details/19578947
Android apk动态加载机制的研究- http://blog.csdn.net/singwhatiwanna/article/details/22597587

Android源码分析-资源加载机制- http://blog.csdn.net/singwhatiwanna/article/details/24532419
Android窗口管理服务WindowManagerService - http://blog.csdn.net/luoshengyang/article/details/8462738

-- Android Fork进程,Fork Android App进程,Android 之 zygote 与进程创建。
  Android 的开机流程:init-> zygote-> system_service,这个很重要,学习这个过程,你可以学习到 Android 是一个分层的系统,对 Android 的整体架构会有了解。
  1. init->Zygote->SystemServer->启动App Activity;
  2. init-> Zygote->SystemServer-> AMS PMS等。

-- 在android运行环境中,Zygote进程是所有虚拟机进程的父亲,Zygote进程在开机初始化的时候会创建一个虚拟机,AMS发消息给Zygote创建的时候实际上是copy一份虚拟机的实例在子进程中。同时在初始化的时候还会注册一些android核心Jni的库放在虚拟机实例内提供上层api调用。fork出的虚拟机会共享这些jni类库。 那么实际上XPosed就是在root后对替换/system/bin/app_process并将注入XposedBridge.jar。app_process是用来控制Zygote的,通过替换成修改后的 app_process可以使Zygote进程加载到我们的XposedBridege.jar。而这个库就是用来做动态Hook java代码造成劫持的。

认识Zygote- 认识Zygote_zygote 是用什么写的-CSDN博客
  zygote主要用来孵化system_server进程和应用程序进程。在孵化出第一个进程system_server后通过runSelectLoopMode等待并处理消息,分裂应用程序进程仍由system_server控制。
  init 是 zygote的父进程, 而system_server和其他所有的com.xxx结尾的app应用程序都是从zygote fork 而来。
  系统中的两个重要服务PackageManagerService和ActivityManagerService,都是由SystemServer进程来负责启动的,而SystemServer进程本身是Zygote进程在启动的过程中fork出来的。
  在Linux系统中,所有的进程都是init进程的子孙进程,也就是说,所有的进程都是直接或者间接地由init进程fork出来的。Zygote进程也不例外,它是在系统启动的过程,由init进程创建的。
  Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制。

-- 在android中,大部分的应用程序进程都是由zygote来创建的,为什么用大部分,因为还有一些进程比如系统引导进程、init进程等不是有zygote创建的。 在android中提到zygote,主要两块,一个是C/C++编写的zygote,主要用来为应用和SystemService fork进程的。一个是java编写的zygote接口,负责为应用和service调用C/C++ zygote的接口执行fork,从而创建VM进程。说明:在android中,service主要有NativeService和SystemService。SystemService主要是指系统中service,比如,InputMethodService、ActivityManagerService等。

-- Android fork process
 1.在android中SystemService的启动是在Zygote进程创建好后进行的,并且由Zygote进程建立好DVM运行环境,加载ZygoteInit的main函数,最终调用Zygote的本地方法forkSystemServer,并执行linux的fork方法创建SystemServer进程。
 2.应用程序的进程也是由Zygote创建的,在ActivityManagerService中的startProcessLocked中调用了Process.start()方法。并通过连接调用Zygote的native方法forkAndSpecialize,执行fork任务。
 3.应用进程和服务进程位于不同的进程中,他们之间是通过IPC进行数据传递的。

-- Android内核解读-Android系统的开机启动过程- http://blog.csdn.net/singwhatiwanna/article/details/19302593
  SystemServer作为zygote孵化的第一个Dalvik进程,其孵化过程在上面已经进行了描述,但是其和普通进程的启动略有不同,普通进程由Zygote.forkAndSpecialize来启动,而SystemServer由Zygote.forkSystemServer来启动,其次是SystemServer内部多创建了一个socket客户端。

-- Android源码解析之(八)-->Zygote进程启动流程- http://blog.csdn.net/qq_23547831/article/details/51104873
 init进程 –> Zygote进程 –> SystemServer进程 –>各种应用进程:
 1.init进程:linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;
 2.Zygote进程:android系统的根进程,主要作用:可以作用Zygote进程fork出SystemServer进程和各种应用进程;
 3.SystemService进程:主要是在这个进程中启动系统的各项服务,比如ActivityManagerService,PackageManagerService,WindowManagerService服务等等;
 4.各种应用进程:启动自己编写的客户端应用时,一般都是重新启动一个应用进程,有自己的虚拟机与运行环境;
 android系统中进程之间通讯的方式是Binder,但是有一个例外是SystemService进程与Zygote进程之间是通过Socket的方式进行通讯的。

  SystemServer进程主要的作用是启动各种系统服务,比如ActivityManagerService,PackageManagerService,WindowManagerService等服务,我们平时熟知的各种系统性的服务其实都是在SystemServer进程中启动的,而当我们的应用需要使用各种系统服务的时候其实也是通过与SystemServer进程通讯获取各种服务对象的句柄的进而执行相应的操作的。

标签:fork,process,Zygote,blog,init,进程,Android,SystemServer
From: https://blog.csdn.net/wenwang88/article/details/141425084

相关文章

  • Linux | 深入探究Linux进程控制:从fork函数到进程等待再到进程替换
    目录1、进程的创建:fork函数          示例:2、父子进程的奇怪现象:为什么同一个地址有不同的值?——区分内存的虚拟地址和物理地址代码:利用fork函数的返回值进行父子进程分流,执行不同的代码块虚拟地址和物理地址:fork调用和地址空间的关系:3、进程的终止......
  • 网络编程process5
    1、网络编程1.1、概述计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备;通过通信线路和通信设备连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:‌网络编程的主要目的是直......
  • 多线程process5
    1、多线程的简介1.1主要概念和三种创建方式主要概念任务、多任务多线程(multithreading)多线程(多条道路),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。普通方法调用......
  • windows核心编程 内核对象,创建进程(CreateProcess),管道(CreatePipe)
    windows核心编程内核对象,创建进程(CreateProcess),管道(CreatePipe)windows核心编程内核对象,创建进程(CreateProcess),管道(CreatePipe)文章目录windows核心编程内核对象,创建进程(CreateProcess),管道(CreatePipe)主进程创建子进程并运行Ping命令主进程创建子进程并运行Ping......
  • docker启动问题: Job for docker.service failed because the control process exited
    系统环境:centos7docker版本:Dockerversion26.1.4,build5650f9b问题:Jobfordocker.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusdocker.service"and"journalctl-xe"fordetails.使用systemctlstatus......
  • ProcessBar窗口类
    一、设计器二、设计器源码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.Threa......
  • C# process open img
    if(System.IO.File.Exists(imgPath)){System.Diagnostics.Process.Start(imgPath);}  //xaml<Windowx:Class="WpfApp261.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x=&......
  • 解锁隐藏资源:Process Explorer 让你的电脑飞起来
    前言在当今这个快节奏的环境中,每个人都希望自己能够成为那个传说中的“高效能人士”,不仅能在最短的时间内搞定所有任务,还能早早下班,享受生活。有时电脑也会耍脾气,当你用尽浑身解数,却依然被一堆乱糟糟的进程和不断卡顿搞得头昏脑胀时,突然间出现了一款神器,它就像是一位超能力者,......
  • 【Linux】撕开fork的本质,深入了解fork函数原理
     目录一、如何使用fork函数?二、fork函数如何产生两个返回值?三、if,else语句怎么会同时执行?为什么i会有两个不同的值?子进程创建出来之后去哪里了?四,为什么给父进程返回子进程的PID,子进程返回0?一、如何使用fork函数?在Linux操作系统里,我们可以通过调用fork函数来创建子进程......
  • OFtutorial09_runtimePostprocessingUtility解析
    组成pipeCalc.H源码头文件#ifndefpipeCalc_H#definepipeCalc_H#include"volFieldsFwd.H"#include"Switch.H"#include"fvc.H"#include"fvMeshFunctionObject.H"#include"logFiles.H"#include"addToRunTi......