当前位置: 首页 > news >正文

Android中PID与UID的区别和联系(2)

一、核心概念对比

特性PID (Process ID)UID (User ID)
本质进程唯一标识符应用身份标识符
分配时机进程启动时动态分配应用安装时静态分配
生命周期进程结束时回收应用卸载时才回收
变化性每次启动都可能不同长期保持不变
作用范围单进程内唯一全设备范围唯一
核心作用系统资源管理(CPU/内存)权限控制与安全隔离
查看方式adb shell ps / android.os.Process.myPid()adb shell dumpsys package / getApplicationInfo().uid

二、工作流程图解

三、核心作用深度解析

1. PID (进程ID)

  • 资源管理

    // 系统通过PID监控进程资源
    ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses();
    for (ActivityManager.RunningAppProcessInfo info : processes) {int pid = info.pid; // 关键标识long memory = am.getProcessMemoryInfo(new int[]{pid})[0].getTotalPss();
    }

  • 进程生命周期控制

    // 系统服务终止异常进程
    if (processCpuTimeExceeded(pid)) {android.os.Process.killProcess(pid); // 通过PID终止
    }
  • 多进程应用管理

    <!-- AndroidManifest.xml -->
    <activity android:name=".MainActivity" android:process=":main"/> <!-- 主进程 --><service android:name=".BackgroundService"android:process=":background"/> <!-- 子进程 -->

2. UID (用户ID)

  • 权限控制模型

    // 系统权限检查核心逻辑
    public static boolean checkPermission(String permission, int pid, int uid) {// 1. 根据PID获取UIDint targetUid = mapPidToUid(pid); // 2. 查询该UID的权限列表Set<String> grantedPermissions = getGrantedPermissions(targetUid);// 3. 验证权限return grantedPermissions.contains(permission);
    }

  • 沙盒隔离机制

    /data/data/com.example.app/  // 应用数据目录
    ├── cache
    ├── databases
    └── shared_prefs
    • 目录权限:drwx------ u0_a123 u0_a123

    • 只有相同UID的应用才能访问

  • 共享UID机制

    <!-- 应用A -->
    <manifest package="com.example.appA"android:sharedUserId="com.example.shared"><!-- 应用B -->
    <manifest package="com.example.appB"android:sharedUserId="com.example.shared">
    • 可共享数据文件

    • 可互相访问组件

    • 签名必须相同

四、PID与UID协作场景

1. Binder IPC 安全验证

2. 多用户系统实现

  • UID组成用户ID * 100000 + 应用ID

  • 隔离效果:不同用户间的相同应用具有不同UID

五、常见问题

Q:Android中PID和UID的区别与作用

A
PID和UID是Android系统中的两个核心标识符:

1. PID(进程ID)

  • 动态标识:系统为每个正在运行的进程分配的唯一数字标识

  • 核心作用

    • 系统资源管理(CPU/内存分配)

    • 进程生命周期控制(启动/终止)

    • 多进程应用中的子进程标识

  • 特性:进程重启时PID会变化

2. UID(用户ID)

  • 静态标识:应用安装时分配的唯一身份标识

  • 核心作用

    • 权限控制:系统基于UID验证应用权限

    • 沙盒隔离:每个应用有独立的数据目录(基于UID)

    • 跨应用共享:通过sharedUserId实现数据共享

  • 特性:应用卸载前UID保持不变

关键协作

  • 系统通过PID到UID的映射实现运行时权限检查

  • Binder IPC使用(PID, UID)元组验证调用方身份

  • 多用户系统中UID包含用户ID和应用ID(userId * 100000 + appId

总结
PID是进程的"临时身份证",用于资源管理;UID是应用的"永久身份证",用于安全控制。二者协同构建了Android的安全沙盒机制。

http://www.dtcms.com/a/302903.html

相关文章:

  • Effective C++ 条款07:为多态基类声明virtual析构函数
  • 《深入理解priority_queue:的使用与模拟实现》
  • 教资科三【信息技术】— 学科知识: 第四章(计算机网络技术)
  • 如何在FastAPI中玩转Schema版本管理和灰度发布?
  • 【深度学习】SOFT Top-k:用最优传输解锁可微的 Top-k 操作
  • (二)Eshop(RabbitMQ手动)
  • 如何 5 分钟给英语视频加上中文字幕?
  • 2025.7.28总结
  • 学术论文写作心得笔记:如何避免“论文像实验报告”
  • 关于sql面试积累
  • [Linux]线程池
  • 【深度学习新浪潮】基于文字生成3D城市景观的算法有哪些?
  • 前端实现PDF在线预览的8种技术方案对比与实战
  • 软件设计师-知识点记录
  • WAIC 2025深度解析:当“养虎”警示遇上机器人拳击赛
  • 构建你的专属区块链:深入了解 Polkadot SDK
  • Java序列化与反序列化
  • 从零开始学习Dify-基于MCP的智能旅行规划助手下(九)
  • 02_FOC学习之-闭环位置控制
  • #Datawhale 组队学习#强化学习Task5
  • C# 基于halcon的视觉工作流-章24-矩形查找
  • SpringBoot数学实例:高等数学实战
  • 学习嵌入式的第三十四天-数据结构-(2025.7.28)数据库
  • Linux选择题2
  • Leaflet简介、初步了解
  • 分布式IO详解:2025年分布式无线远程IO采集控制方案选型指南
  • Java学习-----JVM的垃圾回收算法
  • 分布式IO选型指南:2025年分布式无线远程IO品牌及采集控制方案详解
  • OpenGL为什么要用4X4矩阵
  • 构建 P2P 网络与分布式下载系统:从底层原理到安装和功能实现