你的位置:首页 > 操作系统

[操作系统]系统进程 zygote(二)—— zygote.rc 脚本


夕阳已在沉沉的淡化,这黄昏的美,有谁能描画?莽莽的天涯,哪里是我的家,哪里是我的家?爱人呀,我这般的想着你,你那里可也有丝毫的牵挂?—— 徐志摩·海边的梦

ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

上篇笔记中学习到:zygote 进程是由 init 进程根据 zygote.rc 脚本中的命令,以 service 的方式启动的。

在 linux 系统中,service 通常是一种被称为守护进程 (daemon) 的程序。它通常在系统启动时启动,并一直运行于后台,直到系统关闭时终止。如 Apache 服务器的 httpd 守护进程,一直监听 80 端口以等待 http 请求。service 程序通常通过 service 命令来启动或停止。

在 \system\core\rootdir 目录中有 4 个 zygote 相关的启动脚本:

 

因为 android 5 已开始支持 64bit 程序,所以在 init.rc 中根据系统属性 ro.zygote 的值来引入不同的脚本:

 

由此也可知,属性 ro.zygote 的值可为:zygote32、zygote64、zygote32_64、zygote64_32。

这几个脚本的主要不同:

  • init.zygote32.rc:zygote 进程对应的执行程序是 app_process (纯 32bit 模式)
  • init.zygote64.rc:zygote 进程对应的执行程序是 app_process64 (纯 64bit 模式)
  • init.zygote32_64.rc:启动两个 zygote 进程 (名为 zygote 和 zygote_secondary),对应的执行程序分别是 app_process32 (主模式)、app_process64。
  • init.zygote64_32.rc:启动两个 zygote 进程 (名为 zygote 和 zygote_secondary),对应的执行程序分别是 app_process64 (主模式)、app_process32。

下面仅贴出 init.zygote32_64.rc 的内容:

 1 service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote 2   class main 3   socket zygote stream 660 root system 4   onrestart write /sys/android_power/request_state wake 5   onrestart write /sys/power/state on 6   onrestart restart media 7   onrestart restart netd 8  9 service zygote_secondary /system/bin/app_process64 -Xzygote /system/bin --zygote --socket-name=zygote_secondary10   class main11   socket zygote_secondary stream 660 root system12   onrestart restart zygote

如果读不懂脚本内容,可以看:\system\core\init\readme.txt。

app_process 的源码位于 \frameworks\base\cmds\app_process 路径下,仅有一个 app_main.cpp 文件,入口函数是 main。

学习资料:(1)http://blog.csdn.net/luoshengyang/article/details/6768304 (2)《深入解析 Android 5.0 系统》