引言
在 Android 系统中,/proc 文件系统为用户空间和内核空间之间提供了一种通信的方式。每个正在运行的进程都有一个对应的文件夹,以进程的 PID 命名,在该文件夹下可以找到与该进程相关的各种信息和参数。本篇博客将解析 Android 12 中 /proc/pid 进程参数的含义,并提供详细的解释和示例。
1. /proc/pid/cmdline
该文件包含了运行该进程的命令行参数,以空格分隔。
示例:
system_server com.android.server.SystemServer
2. /proc/pid/stat
该文件包含了进程的状态信息,各个字段由空格分隔。
示例:
326 (system_server) S 1 326 0 34816 2752 0 0 0 0 0 0 0 0 20 0 1 0 2 0 615028 37185536 1342 4294967295 134512640 134513720 3210917792 3210916048 1398094598106 0 0 0 0 0 4131904 655376 0 0 17 1 0 0 32 4294967295
字段解释:
- 1:进程 ID
- 2:进程命令名,包含在括号中
- 3:进程状态,具体含义见下表
- 4~53:各种统计信息,如进程运行状态、调度信息等
进程状态解释:
- R:运行中
- S:睡眠中
- D:不可中断的睡眠
- Z:僵尸进程
- T:停止或跟踪进程
- X:死掉的进程
3. /proc/pid/status
该文件包含了有关进程状态的详细信息,以键值对的形式展示。
示例:
Name: system_server
State: S (sleeping)
Tgid: 326
Ngid: 0
Pid: 326
PPid: 1
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 128
Groups: 3003 1004 1007 1011 1028
VmPeak: 34816 kB
VmSize: 34816 kB
VmLck: 0 kB
VmPin: 0 kB
...
字段解释:
- Name:进程名
- State:进程状态
- Tgid:线程组 ID
- Pid:进程 ID
- PPid:父进程 ID
- TracerPid:跟踪该进程的进程 ID
- Uid:用户 ID
- Gid:用户组 ID
- VmPeak:进程占用的虚拟内存峰值
- VmSize:进程占用的虚拟内存大小
4. /proc/pid/environ
该文件包含了进程的环境变量,以 null 字符分隔。每个环境变量以“变量名=值”的形式表示。
示例:
USER=rootTERM=xtermPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binPWD=/rootLANG=en_US.UTF-8HOME=/root...
5. /proc/pid/maps
该文件包含了进程的内存映射信息,用于查看进程的内存分布和使用情况。
示例:
55018000-55019000 r--p 00000000 fd:01 3983615 /system/lib/libdl.so
55019000-55023000 r-xp 00001000 fd:01 3983615 /system/lib/libdl.so
55023000-55025000 r--p 0000a000 fd:01 3983615 /system/lib/libdl.so
55025000-55026000 rw-p 0000c000 fd:01 3983615 /system/lib/libdl.so
...
字段解释:
- 起始地址-结束地址:映射的内存地址范围
- 权限标志:r(可读)、w(可写)、x(可执行)
- 文件偏移:内存映射的文件偏移
- 设备号:表明在哪一个设备上
- 节点号:指向具体的文件名
结论
/proc/pid 进程参数提供了深入了解 Android 系统中进程的方法。通过解析 cmdline、stat、status、environ 和 maps 文件,我们可以获得进程的命令行参数、状态信息、环境变量和内存映射等重要详情。这些信息对于系统调优、性能分析和问题排查都非常有价值。
欢迎大家探索更多 /proc 目录下的文件,以深入理解 Android 系统的内部工作原理。
本文来自极简博客,作者:时光旅人,转载请注明原文链接:Android 12 解析/proc/pid进程参数