当前位置: 首页 > 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.lryc.cn/news/602310.html

相关文章:

  • Go 语言面试题
  • 数据分析干货| 衡石科技可视化创作之仪表盘控件如何设置
  • GitLab 公共仓库:coding 用到的 git 命令
  • Springboot社区养老保险系统小程序
  • 一文理清 Linux 软件管理核心知识:从程序组成到包管理工具
  • Java面试宝典:MySQL8新特性
  • shell学习从入门到精通(第二部分)
  • 机器学习sklearn:决策树的参数、属性、接口
  • nccl中__syncthreads的作用及例子 (来自deepseek)
  • 135端口与WMI攻防全解析
  • 网络安全基础知识【4】
  • python中类变量 __slots__ 解析
  • 5190 - 提高:DFS序和欧拉序:树上操作(区域修改1)
  • 排序算法 (Sorting Algorithms)-JS示例
  • AI原生应用:从人机关系重构到数字空间革命
  • RF随机森林分类预测+特征贡献SHAP分析,通过特征贡献分析增强模型透明度,Matlab代码实现,引入SHAP方法打破黑箱限制,提供全局及局部双重解释视角
  • 力扣7:整数反转
  • OCR 赋能合同抽取:不良资产管理公司的效率加速器
  • Kafka 顺序消费实现与优化策略
  • 数据结构之顺序表链表栈
  • 【Git】Linux-ubuntu 22.04 初步认识 -> 安装 -> 基础操作
  • 图片PDF识别工具:扫描PDF文件批量OCR区域图识别改名,识别大量PDF区域内容一次性改名
  • 基于LSTM和GRU的上海空气质量预测研究
  • 图片上传 el+node后端+数据库
  • 如何用VUE实现用户发呆检测?
  • Android通知(Notification)全面解析:从基础到高级应用
  • 【前端】解决Vue3+Pinia中Tab切换与滚动加载数据状态异常问题
  • 05 OpenCV--图像预处理之图像轮廓、直方图均衡化、模板匹配、霍夫变化、图像亮度变化、形态学变化
  • 数据结构:下三角矩阵(Lower Triangular Matrix)
  • MySQL SQL性能优化与慢查询分析实战指南:新手DBA成长之路