Android随笔-init进程是什么?

发布时间:2026/7/5 1:15:54
Android随笔-init进程是什么? Android init进程是 Linux 内核启动后的第一个用户空间进程PID 固定为 1是所有其他用户进程的鼻祖。一、init 进程的起源启动链路电源键按下 → Boot ROM → BootLoader → Linux Kernel → init 进程 (PID1)Linux 内核完成初始化后在系统文件中寻找 init 程序并执行它 。内核启动参数中指定init/init告诉内核启动完成后执行 /init 程序 。二、init 进程的核心作用2.1 创建和挂载文件系统// init 第一阶段mkdir(/dev,0755);mkdir(/proc,0755);mkdir(/sys,0755);mount(tmpfs,/dev,tmpfs,MS_NOSUID,mode0755);mount(proc,/proc,proc,0,NULL);mount(sysfs,/sys,sysfs,0,NULL);创建并挂载系统运行必需的目录/dev — 设备文件/proc — 进程信息/sys — 内核参数/data — 用户数据/system — 系统分区2.2 初始化 SELinux 安全策略// 初始化 SELinuxselinux_android_load_policy();selinux_restore_context(/dev);selinux_restore_context(/system);加载安全策略文件为系统文件和目录设置安全上下文确保后续进程运行在正确的安全域中2.3 启动属性服务Property Service// 创建 /dev/__properties__ 目录// 初始化属性存储区域start_property_service();Android 系统的全局变量系统所有进程通过 getprop/setprop 读写系统属性例如ro.product.model、persist.sys.locale 等2.4 解析 rc 文件启动系统服务这是 init 进程最重要的职责// 解析 init.rc 及所有 *.rc 文件init_parse_config_file(/init.rc);// 执行 on early-init、on init、on late-init 等触发器// 启动 class main/core 的服务启动的核心服务包括服务作用Zygote应用进程孵化器servicemanagerBinder 服务管理surfaceflinger图形合成media多媒体服务netd网络守护进程audioserver音频服务三、init 进程的启动阶段三阶段模型Android 9.0 system/core/init/ 目录下四、init 进程与 Zygote 的关系init 进程通过 rc 文件定义Zygote 的启动方式然后创建Zygote 进程之后 Zygote 独立运行但 init 仍然守护它崩溃后自动重启。五、init 进程的特殊之处特性说明PID 1Linux 用户空间的第一个进程永不退出进入主循环持续监听事件所有进程的父进程Zygote、SystemServer 等都是由它 fork 或启动守护进程管理器监控服务状态崩溃自动重启权限极高以 root 运行初始化阶段拥有最高权限与内核紧密配合内核启动完成后第一个执行的用户程序六、init 进程 vs 其他进程进程PID由谁启动作用swapper/idle0内核自动创建内核空闲进程init1内核启动用户空间第一个进程初始化系统kthreadd2内核创建内核线程管理Zygote不定init 启动应用进程孵化器SystemServer不定Zygote fork管理系统服务七、总结init 进程是 Android 系统的开机管家—— 它由内核启动负责搭建系统运行环境文件系统、安全策略、属性服务然后按照 rc 文件的剧本逐个启动Zygote、SystemServer 等核心服务最后进入守护循环确保系统服务稳定运行。没有 initAndroid系统就无法从内核完成到用户空间的过渡。