android 孵化进程,Android 进程篇之进程整理

整理 Android 手机,核心进程和线程情况

一、概括

系统启动架构图:

50223928a4532457008d293206e4ab0e.png

本文是从进程/线程的视角来分析该问题。

1.1 父进程

在所有进程中,以父进程的姿态存在的进程(即图中的浅红色项),如下:

kthreadd进程: 是所有内核进程的父进程

init进程 : 是所有用户进程的父进程(或者父父进程)

zygote进程 : 是所有上层Java进程的父进程,另外zygote的父进程是init进程。

1.2 重量级进程

在Android进程中,有3个非常重要的进程(即图中的深紫色项),如下:

system_server:是由zygote孵化而来的,是zygote的首席大弟子,托起整个Java framework的所有service,比如ActivityManagerService, PowerManagerService等等。

mediaserver:是由init孵化而来的,托起整个C++ framework的所有service,比如AudioFlinger, MediaPlayerService等等。

servicemanager:是由init孵化而来的,是整个Binder架构(IPC)的大管家,所有大大小小的service都需要先请示servicemanager。

二、进程

Android进程从大类来划分,可分为内核进程和用户进程。

2.1 kthreadd子进程

kthreadd进程(2号进程),是Linux系统的内核进程,是所有内核进程的鼻祖。

由Kthreadd孵化出来的内核守护进程,这些进程位于系统启动架构图中的kernel的深蓝色块。下面列举常见的内核进程:

进程名

解释

ksoftirqd/0

kworkder/0:0H

migration/0

watchdog/0

binder

rcu_sched

perf

netns

rpm-smd

mpm

writeback

system

irq/261-msm_iom

mdss_dsi_event

kgsl-events

spi

therm_core:noti

msm_thermal:hot

...

...

内核进程都不存在子进程与子线程,并且所有内核进程的用户都是root.

每个内核进程的作用,后续再补上

2.2 init子进程

init进程(1号进程),是Linux系统的用户空间进程,或者说是Android的第一个用户空间进程。

下面列举常见的由init进程孵化而来的用户进程:

进程名

进程文件

作用

zygote

/system/bin/app_process

Java界的第一个进程,分32位和64位

servicemanager

/system/bin/servicemanager

Binder的守护进程

media

/system/bin/mediaserver

多媒体服务的进程

ueventd

/sbin/ueventd

uevent守护进程

healthd

/sbin/healthd

电池的守护进程

logd

/system/bin/logd

log的守护进程

adbd

/sbin/adbd

adbd进程(Socket IPC)

lmkd

/system/bin/lmkd

lowmemorykiller守护进程

console

/system/bin/sh

控制台

vold

/system/bin/vold

volume守护进程

netd

/system/bin/netd

network守护进程

debuggerd

/system/bin/debuggerd

用于调试程序异常退出

debuggerd64

/system/bin/debuggerd64

用于调试程序异常退出

ril-daemon

/system/bin/rild

Radio Interface Layer的守护进程

installd

/system/bin/installd

安装的守护进程

surfaceflinger

/system/bin/surfaceflinger

UI帧相关的进程

...

...

servicemanager,作为Binder架构的一个大管家,所有注册服务、获取服务,都需要经过servicemanager,更多关于servicemanager查看Binder系列文章。

2.3 Zygote子进程

Zygote本身是一个Native的应用程序,刚开始的名字为“app_process”,运行过程中,通过系统调用将自己名字改为Zygote。是所有上层Java进程的父进程,android系统中还有另一个Zygote64进程,用于孵化64位的应用进程。

在图中的红色线,便是Zygote fork出来的进程,所有的App进程都是由Zygote fork产生的。

下面列举Zyogte进程孵化的部分子进程

进程名

解释

system_server

Java framework的各种services都依赖此进程

com.android.phone

电话应用进程

android.process.acore

通讯录进程

android.process.media

多媒体应用进程

com.android.settings

设置进程

com.android.wifi

Wifi应用进程

...

...

三、线程

3.1 Zygote 子线程

在adb shell终端,输入:

ps -t | grep -E "NAME| 497 "

解释: -E "NAME| 497 " 是输出时能多显示NAME的那一行,方便查看每一列代表的具体含义,497是Zygote的进程号。

共享父进程的地址空间的便是子线程,即VSIZE必然相同,否则就是子进程,如下图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值