Zygote(app_process)相关分析1
首先我们从Init.c中来看,当Init中解析完init.rc文件时会得到一系列的action,通过action去调用一些函数。
Zygote是在init.rc中service section中
- service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
在parse_new_section()中会解析init.rc文件,最后会添加到相应的链表中。
service 关键字定义的服务将会添加到 service_list 链表中。
on 关键开头的项将会被会添加到 action_list 链表中。
1.在init.c中执行
action_for_each_trigger(“boot”,…); //创建zygote是从boot阶段开始。
drain_action_queue()
以上是执行action_list 中的命令:
从action_list 中取出 act->name ,再调用 action_add_queue_tail(act)将其插入到队列 action_queue 尾部。
drain_action_queue() 从action_list队列中取出队列项 ,然后执行act->commands列表中的所有命令。
init.rc中COMMAND:
class_start default
在添加到service_list 链表中时 svc->classname = "default";
default 启动所有service 关键字定义的服务。
class_start 被触发会调用do_class_start();
2.do_class_start()中会执行
service_for_each_class(args[1],..); //从service_list 链表中获取service后启动。
service_start(svc, NULL); //service_start_if_not_disabled的被启动。
3.接着会调用service_start()
- 此函数中init中fork出一个进程。
- 根据socketinfo创建socket(zygote stream 666)。
- 利用execve函数来执行zygote的可执行文件/system/bin/app_process。
这样app_process的main函数就被启动起来了。也就是Zygote。Zygote的启动就这样分析完了。
接下来分析一下zygote的onrestart。
4.重启zygote
- 子进程(zygote)退出时会调用sigchld_handler(),此函数中会往signal_fd中写数据。
- 这时init进程的socket会接收信息。就会从init中的poll函数中返回。(signal_fd是在init中通过socketpair创建的两个socket中的一个。)
- flag设置为SVC_RESTARTING后执行service的onresatart中的COMMAND。
- poll()中返回后,会进入新的循环,会通过flag重启所有RESTARTING的svc。
drain_action_queue();
restart_process();
最后又被service_start函数重启了。
Zygote(app_process)相关分析1的更多相关文章
- android手机各大分区详解
1. bootloader 当我们拿到一款手机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程序这中间发生了些什么呢,我们从下面这张简化了的手机结构图开始: 注意:该结构图并不反映手机的实 ...
- Zygote(app_process)相关分析2
在前一篇文章中已经分析了从init.c到Zygote(app_process)的启动流程. 今天开始分析frameworks/base/cmds/app_process/app_main.cpp. s ...
- 系统进程 zygote(三)—— app_process 的 main 函数
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 首先: , , , ) < ) { // Older kernels don't understand ...
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- 系统进程 zygote(一)—— 概述
和蔼的春光,充满鸳鸯的池塘:快辞别寂寞的梦乡,来和我摸一会鱼儿,折一枝海棠.—— 徐志摩·醒!醒! ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张 ...
- 系统进程 zygote(二)—— zygote.rc 脚本
夕阳已在沉沉的淡化,这黄昏的美,有谁能描画?莽莽的天涯,哪里是我的家,哪里是我的家?爱人呀,我这般的想着你,你那里可也有丝毫的牵挂?—— 徐志摩·海边的梦 ilocker:关注 Android 安全( ...
- Zygote浅谈
Zygote是什么 操作系统中,进程实际上是文件到地址空间的映射像.进程将要运行时,由操作系统将其映射到地址空间,完成这项工作的事物本质也应是一个进程,我们称这个进程为孵化进程,那么这个进程怎么收到消 ...
- Zygote进程【1】——Zygote的诞生
在Android中存在着C和Java两个完全不同的世界,前者直接建立在Linux的基础上,后者直接建立在JVM的基础上.zygote的中文名字为"受精卵",这个名字很好的诠释了zy ...
- [Android] 解析android framework下利用app_process来调用java写的命令及示例
reference to :http://bbs.9ria.com/thread-253058-1-1.html 在android SDK的framework/base/cmds目录下了,有不少目录, ...
随机推荐
- Effective Modern C++翻译(3)-条款2:明白auto类型推导
条款2 明白auto类型推导 如果你已经读完了条款1中有关模板类型推导的内容,那么你几乎已经知道了所有关于auto类型推导的事情,因为除了一个古怪的例外,auto的类型推导规则和模板的类型推导规则是一 ...
- Flex 仿Winxp左侧菜单
呆毛放出,源码暂时不能公布,一直比较喜欢winxp的左侧菜单样式,以前也用xslt实现过,但总是达不到完美,没想到FLex轻松做到了这一点,几乎和winxp一模一样.
- web调试技巧
接触web不久,遇到了一些"奇怪"的问题,现将一些调试技巧总结如下: 1.欲添加某一样式,点击右键,查看源码 2.样式有问题,点击右键,审查元素 当然,还有一些经验总结 ...
- 图的最短路算法 Bellman-Ford
BF求图的最短路径的时间复杂度是O(MN),这样的时间复杂度并不比迪杰斯特拉算法好,但是BF算法支持图中存在负权的情况,但图中不能存在负圈,因为如果存在负圈,最短路是不存在的,因此BF算法的另一个重要 ...
- alter table <表名 > add constraint <主键名>用法
alter table <表名 > add constraint <主键名>用法介绍 1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 因为主键约束: ...
- No.009 Palindrome Number
9. Palindrome Number Total Accepted: 136330 Total Submissions: 418995 Difficulty: Easy Determine whe ...
- Oracle:安装中的注意事项
导读:Oracle数据库的安装,姑娘我也是醉了.从开发今日开讲后台系统前,我就一直在装,第一版都开发完了,我昨天静下心来,才终于装上.在这个过程中,出现了好些个问题,说起来都是泪呀.现在就总结总结这个 ...
- Use EnCase to acquire data from a smartphone
Yesterday someone asked me a question can EnCase acquire data from a smartphone, and my reply was &q ...
- U盘加载硬盘控制卡驱动安装Windows 2003 指南
http://www.dell.com/Support/Article/cn/zh/cnbsd1/SLN263067
- Android IOS WebRTC 音视频开发总结(六一)-- 大数据解密国内实时通讯行业开发现状
本文主要介绍国内实时通讯行业现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 这几年移动互联网发展势头很猛,与 ...