第十一节_Android_进程管理

第十一节 Android 进程管理

(第1章 安卓逆向概论)

学习目标

学完本节,希望你能够:搞清 Android 进程咋管(Zygote、App、System Server);掌握进程生命周期和调度(前台、后台、服务、缓存);知道 OOM 和进程优先级、杀进程策略;会用 ps、top、dumpsys activity、/proc 看进程;能 Hook 进程管理做持久化或逆向(仅学习)。


一、Android 进程管理是咋回事?

在 Android 中,应用程序 通常不会直接创建进程 ,而是由 Zygote 负责孵化。

进程类型 作用 示例
Zygote 负责 Fork 其他进程 /system/bin/app_process
System Server 管理系统服务 system_server 进程
App 进程 运行应用 com.example.app
Native 进程 运行 C/C++ 代码 surfaceflinger, mediaserver


二、关键进程是啥?

1. Zygote 进程

Zygote 是 Android 进程的起点,其主要作用是:

  • 预加载类库 & 资源,减少应用启动时间。
  • Fork 子进程,所有 App 进程均由 Zygote 复制而来。

查看 Zygote 进程

bash 复制代码
adb shell ps -A | grep zygote

输出示例:

复制代码
zygote64   1234  567   123456K fg    00000000 S zygote64
zygote     1235  567   123456K fg    00000000 S zygote

Zygote 如何 Fork 进程?

java 复制代码
public static void main(String[] argv) {
    ZygoteServer zygoteServer = new ZygoteServer();
    while (true) {
        ZygoteConnection connection = zygoteServer.acceptCommandPeer();
        connection.runOnce();
    }
}

逆向分析 Zygote

bash 复制代码
strings /system/bin/app_process

2. System Server 进程

System Server 进程 负责管理 Android 系统服务,如 AMS(ActivityManagerService) , PMS(PackageManagerService)

查看 System Server 进程

bash 复制代码
adb shell ps -A | grep system_server

输出:

复制代码
system    1356  567   456789K fg    00000000 S system_server

System Server 关键代码

java 复制代码
public static void main(String[] args) {
    SystemServer server = new SystemServer();
    server.run();
}

分析 System Server 中的 AMS

bash 复制代码
adb shell dumpsys activity

3. 应用进程

应用进程通常由 Zygote Fork,负责执行应用代码。

查看当前运行的 App 进程

bash 复制代码
adb shell ps -A | grep com.example.app

查看应用进程详情

bash 复制代码
adb shell dumpsys meminfo com.example.app

杀死应用进程

bash 复制代码
adb shell am force-stop com.example.app


三、进程优先级和 OOM 咋管?

Android 采用 OOM(Out Of Memory)优先级管理机制 ,根据进程的重要性决定 是否杀死进程

优先级 进程类型 是否可杀死
0(最高) 前台进程(前台 Activity) ❌ 不能杀死
1 可见进程(后台 Activity) ❌ 通常保留
2 服务进程(后台 Service) 低内存时杀死
3 后台进程(不可见 Activity) 低内存时杀死
4(最低) 缓存进程(长期未使用的 App) 优先被杀死

查看进程 OOM 级别

bash 复制代码
adb shell cat /proc/1234/oom_adj

输出:

复制代码
0   # 前台进程,不会被杀死
6   # 后台进程,低内存时可能被杀死
15  # 缓存进程,优先被杀死

调整进程 OOM 级别

bash 复制代码
adb shell echo -17 > /proc/1234/oom_adj

👉 可用于保护进程,防止被系统杀死(需 Root)



四、进程管理 API 咋用?

1. ActivityManager

java 复制代码
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo process : processes) {
    Log.d("Process", "PID: " + process.pid + " Name: " + process.processName);
}

2. 监听进程状态

java 复制代码
ProcessLifecycleOwner.get().getLifecycle().addObserver(new LifecycleObserver() {
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onAppBackgrounded() {
        Log.d("Process", "App moved to background!");
    }
});

3. 让进程持久运行

java 复制代码
startForegroundService(new Intent(this, MyService.class));


五、逆向里咋 Hook 进程?

1. Hook Android 进程调度

bash 复制代码
frida -U -n system_server -e "Interceptor.attach(Module.findExportByName(null, 'fork'), { onEnter: function(args) { console.log('fork called'); }})"

2. 绕过进程杀死

bash 复制代码
adb shell setprop persist.sys.background_process_limit 0

3. 限制某进程 CPU 使用

bash 复制代码
taskset -p 0x01 1234


动手练一练

  1. 检查 Android 设备上的进程
bash 复制代码
adb shell ps -A
  1. 解析 Zygote 进程
bash 复制代码
adb shell ps -A | grep zygote
  1. 获取 App 进程的内存信息
bash 复制代码
adb shell dumpsys meminfo com.example.app
  1. 监听进程状态
java 复制代码
ProcessLifecycleOwner.get().getLifecycle().addObserver(new LifecycleObserver() {
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onAppBackgrounded() {
        Log.d("Process", "App moved to background!");
    }
});

本节小结

你只要记住这几条就行:Zygote 预加载并 Fork 出所有 App 进程,System Server 跑 AMS/PMS 等;进程有前台/可见/服务/后台/缓存等优先级,OOM 时按优先级杀;用 ps、dumpsys activity、/proc/pid 看进程,用 Frida 可 Hook fork 等(仅学习)。


本节思考与练习

  1. 概念:Zygote 和 System Server 各干啥?OOM 杀进程按啥顺序?
  2. 动手:用 adb shell ps -Adumpsys activity 看当前进程和前台 Activity。
  3. 动手:用 cat /proc/某pid/oom_adj 看进程的 OOM 级别。

下一节预告 :下一节讲 Android 权限机制(第十二节),把普通/危险/特殊权限和运行时权限、SELinux 讲清楚。

相关推荐
长沙火山3 小时前
第九节_Android_CPU_架构解析
逆向·安卓逆向
长沙火山1 天前
第六节_x86_vs_ARM_汇编
逆向·安卓逆向
泡泡以安1 天前
Android 逆向实战:从零突破某电商 App 登录接口全参数加密
android·爬虫·安卓逆向
长沙火山1 天前
第五节_汇编语言基础
逆向·安卓逆向
夏了茶糜3 天前
Electron应用逆向分析思路
逆向
嫂子的姐夫6 天前
25-jsl:gov公安(全扣补环境版)
爬虫·逆向·加速乐
嫂子的姐夫6 天前
24-MD5:红人点集登录+凡客网登录
爬虫·python·逆向·小白逆向练手
clown_YZ8 天前
KnightCTF2026--WP
网络安全·逆向·ctf·漏洞利用
这样の我14 天前
某海外上报接口 strData 纯算逆向
逆向