系统进程 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_secondary 10 class main 11 socket zygote_secondary stream 660 root system 12 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 系统》