proc目录学习

/proc目录简介

首先来介绍一下/proc目录,它是一个虚拟的目录,其下面的文件和目录也都是虚拟的,不占用实际的存储空间,而是存在于系统内存中。proc以文件系统的方式为访问系统内核的操作提供接口,它是动态从系统内核中读出所需信息的。

  • /proc/cmdline:显示内核启动的命令行。
  • /proc/cpuinfo:显示系统cpu的信息。
  • /proc/filesystems,显示当前注册了的文件系统列表,nodev表示为虚拟文件系统。
  • /proc/interrupts:显示当前系统的中断信息.
  • /proc/ioports:被占用的输入/输出地址范围列表。
  • /proc/kmsg:输出内核消息日志。
  • /proc/loadavg:监控cpu平均负载,其数值为所有核上cpu占用的累加值,前三个分别表示最近1、5、15分钟的平均负载,第四个表示当前运行进程数和进程总数,最后一个表示最近运行的进程id。
  • /proc/locks:打开文件上的加锁信息。
  • /proc/meminfo:显示物理及虚拟内存使用情况。
  • /proc/misc:内核函数misc_register登记的设备驱动程序。
  • /proc/modules:加载的内核模块列表。
  • /proc/mounts:当前系统所安装的文件系统信息(包括手动安装的)。
  • /proc/stat: 系统简要信息。
  • /proc/uptime:分别表示系统启动时间和系统空闲时间。
  • /proc/version:系统内核版本。
  • /proc/net: 其实际挂载点是/proc/self/net,能够显示当前各种网络情况,例如通过tcp文件可以查看tcp连接数及连接情况。
  • /proc/sys 报告各种不同的内核参数,某些参数能在root的情况下进行修改。
  • /proc/devices 当前挂载的所有软硬件设备(字符设备和块设备),包括主设备号和设备名称。
  • /proc/asound:声卡相关的信息。
  • /proc/buddyinfo:每个内存区中每个order有多少块可用,和内存碎片问题有关。
  • /proc/bus: 输入设备信息。
  • /proc/cgroups:查看cgroups子系统信息。
  • /proc/diskstats:用于显示磁盘、分区和统计信息。
  • /proc/execdomains:安全相关的信息。
  • /proc/fb:帧缓冲设备信息。
  • /proc/iomem:记录物理地址的分配情况。
  • /proc/kallsyms:内核符号表信息。
  • /proc/pagetypeinfo:内存分页信息。
  • /proc/partitions:分区信息
  • /proc/sched_debug:cpu调度信息。
  • /proc/softirqs:软中断情况。
  • /proc/vmallocinfo:vmalloc内存分配信息。
  • /proc/vmstat:统计虚拟内存信息。
  • /proc/pid:显示进程相关的所有信息。

懒得整理成表格了,那天要是看我有空就叫我整理成表格吧

/proc/xx/进程目录

在/proc目录下面还有很多目录的名字是数字,这些目录保存了当前系统中运行的所有进程的信息,数字对应的是进程的pid。

例子:

image-20230726125449236

普通用户只能查看本进程相关的信息,需要取得root权限后才能查看其它进程信息,例如查看进程7289目录内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
127|sagit:/proc/7289 $ ls -l
total 0
dr-xr-xr-x 2 shell shell 0 2023-07-27 15:49 attr
-rw-r--r-- 1 shell shell 0 2023-07-27 15:49 autogroup
-r-------- 1 shell shell 0 2023-07-27 15:49 auxv
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 cgroup
--w------- 1 shell shell 0 2023-07-27 15:49 clear_refs
-r--r--r-- 1 shell shell 0 2023-07-27 15:43 cmdline
-rw-r--r-- 1 shell shell 0 2023-07-27 15:49 comm
-rw-r--r-- 1 shell shell 0 2023-07-27 15:49 coredump_filter
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 cpuset
lrwxrwxrwx 1 shell shell 0 2023-07-27 15:49 cwd -> /proc/7289
-r-------- 1 shell shell 0 2023-07-27 15:49 environ
lrwxrwxrwx 1 shell shell 0 2023-07-27 15:42 exe -> /system/bin/sh
dr-x------ 2 shell shell 0 2023-07-27 15:42 fd
dr-x------ 2 shell shell 0 2023-07-27 15:49 fdinfo
-r-------- 1 shell shell 0 2023-07-27 15:49 io
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 limits
dr-x------ 2 shell shell 0 2023-07-27 15:49 map_files
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 maps
-rw------- 1 shell shell 0 2023-07-27 15:49 mem
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 mountinfo
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 mounts
-r-------- 1 shell shell 0 2023-07-27 15:49 mountstats
dr-xr-xr-x 10 shell shell 0 2023-07-27 15:49 net
dr-x--x--x 2 shell shell 0 2023-07-27 15:49 ns
-rw-r--r-- 1 shell shell 0 2023-07-27 15:49 oom_adj
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 oom_score
-rw-r--r-- 1 shell shell 0 2023-07-27 15:42 oom_score_adj
-r-------- 1 shell shell 0 2023-07-27 15:49 pagemap
-r-------- 1 shell shell 0 2023-07-27 15:49 personality
--w------- 1 shell shell 0 2023-07-27 15:49 reclaim
lrwxrwxrwx 1 shell shell 0 2023-07-27 15:49 root -> /
-rw-rw-rw- 1 shell shell 0 2023-07-27 15:49 sched_group_id
-rw-r--r-- 1 shell shell 0 2023-07-27 15:49 sched_init_task_load
-rw-r--r-- 1 shell shell 0 2023-07-27 15:49 sched_wake_up_idle
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 schedstat
-r--r--r-- 1 shell shell 0 2023-07-27 15:46 smaps
-r-------- 1 shell shell 0 2023-07-27 15:49 stack
-r--r--r-- 1 shell shell 0 2023-07-27 15:43 stat
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 statm
-r--r--r-- 1 shell shell 0 2023-07-27 15:48 status
-r-------- 1 shell shell 0 2023-07-27 15:49 syscall
dr-xr-xr-x 3 shell shell 0 2023-07-27 15:49 task
-r--r--r-- 1 shell shell 0 2023-07-27 15:49 time_in_state
-rw-rw-rw- 1 shell shell 0 2023-07-27 15:49 timerslack_ns
-rw-rw-rw- 1 shell shell 0 2023-07-27 15:49 top_app
-r--r--r-- 1 shell shell 0 2023-07-27 15:48 wchan

进程目录文件或目录的分析

cmdline

  • 文件

该(虚拟)文件包含了启动该进程的整个命令行。它未曾格式化:程序与其参数之间没有空格,行末也没有换行。

cwd

  • 目录

该符号链接指向该进程的当前工作目录。现在我见过的基本都是根目录,从上面的输出就能看出它链接到的是根目录。

environ

  • 文件

该文件包含为该进程定义的所有环境变量,格式为 变量 = 值。与 cmdline 文件一样,其内容未曾格式化过:各个变量之间没有分行,文件末尾也没有换行。

exe

  • 目录

这是指向该进程所执行的可执行程序文件的符号链接。上面的输出可以看出链接到/system/bin/adb,一般的用户进程是链接到/system/bin/app_process,这是zygote进程的实际实现文件,因为所有进程都是zygote孵化出来的,所以这里都会链接到它。

fd

  • 目录

在此子目录中包含了该进程当前打开的所有描述符。下面看一下进程7289的输出:

1
2
3
4
5
6
sagit:/proc/7289 $ ls -l fd
total 0
lrwx------ 1 shell shell 64 2023-07-27 15:50 0 -> /dev/pts/0
lrwx------ 1 shell shell 64 2023-07-27 15:50 1 -> /dev/pts/0
lrwx------ 1 shell shell 64 2023-07-27 15:50 10 -> /dev/tty
lrwx------ 1 shell shell 64 2023-07-27 15:50 2 -> /dev/pts/0

实际上,这是该进程打开的文件描述符列表,每个描述符由一个符号链接表示,其名称为该描述符的编号,并指向该描述符打开的文件。注意这些符号链接的权限:它们的意义仅代表被相应描述符打开的文件的权限。

maps

  • 文件

这个文件中显示了该进程的虚拟地址空间的分布情况。该文件有6列,自左至右各列为:

  • 地址:库在进程里地址范围
  • 权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;
  • 偏移量:库在进程里地址范围
  • 设备:映像文件的主设备号和次设备号,当设备号为 0 且没有 inode 号或文件名时,它就是一个匿名映射,表示没有节点与内存相对应;
  • 节点:映像文件的节点号;
  • 路径: 映像文件的路径
  • 每项都与一个vm_area_struct结构成员对应。

利用进程8423来举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
sagit:/proc/7289 $ cat maps
5a29274000-5a292cc000 r-xp 00000000 103:1d 7356 /system/bin/sh
5a292e2000-5a292e4000 r--p 0005e000 103:1d 7356 /system/bin/sh
5a292e4000-5a292e5000 rw-p 00060000 103:1d 7356 /system/bin/sh
5a292e5000-5a292e7000 rw-p 00000000 00:00 0
7cfd800000-7cfdc00000 rw-p 00000000 00:00 0 [anon:libc_malloc]
7cfdd59000-7cfdd5b000 r-xp 00000000 103:1d 6092 /system/lib64/libnetd_client.so
7cfdd5b000-7cfdd78000 ---p 00000000 00:00 0
7cfdd78000-7cfdd79000 r--p 0000f000 103:1d 6092 /system/lib64/libnetd_client.so
7cfdd79000-7cfdd7a000 rw-p 00010000 103:1d 6092 /system/lib64/libnetd_client.so
7cfdd83000-7cfde55000 r-xp 00000000 103:1d 6091 /system/lib64/libc++.so
7cfde55000-7cfde6c000 ---p 00000000 00:00 0
7cfde6c000-7cfde76000 r--p 000d6000 103:1d 6091 /system/lib64/libc++.so
7cfde76000-7cfde77000 rw-p 000e0000 103:1d 6091 /system/lib64/libc++.so
7cfde77000-7cfde7a000 rw-p 00000000 00:00 0 [anon:.bss]
7cfde9e000-7cfdea0000 r-xp 00000000 103:1d 6374 /system/lib64/libdl.so
7cfdea0000-7cfdebd000 ---p 00000000 00:00 0
7cfdebd000-7cfdebe000 r--p 0000f000 103:1d 6374 /system/lib64/libdl.so
7cfdebe000-7cfdebf000 rw-p 00000000 00:00 0 [anon:.bss]
7cfdec7000-7cfdfb6000 r-xp 00000000 103:1d 6620 /system/lib64/libc.so
7cfdfb6000-7cfdfd1000 ---p 00000000 00:00 0
7cfdfd1000-7cfdfd7000 r--p 000fa000 103:1d 6620 /system/lib64/libc.so
7cfdfd7000-7cfdfd9000 rw-p 00100000 103:1d 6620 /system/lib64/libc.so
7cfdfd9000-7cfdfda000 rw-p 00000000 00:00 0 [anon:.bss]
7cfdfda000-7cfdfdb000 r--p 00000000 00:00 0 [anon:.bss]
7cfdfdb000-7cfdfe3000 rw-p 00000000 00:00 0 [anon:.bss]
7cfe01b000-7cfe052000 r-xp 00000000 103:1d 6495 /system/lib64/libm.so
7cfe052000-7cfe06a000 ---p 00000000 00:00 0
7cfe06a000-7cfe06b000 r--p 0003f000 103:1d 6495 /system/lib64/libm.so
7cfe06b000-7cfe06c000 rw-p 00040000 103:1d 6495 /system/lib64/libm.so
7cfe06f000-7cfe08f000 r--s 00000000 00:13 16938 /dev/__properties__/u:object_r:default_prop:s0
7cfe08f000-7cfe090000 rw-p 00000000 00:00 0 [anon:linker_alloc]
7cfe09f000-7cfe0a0000 r--p 00000000 00:00 0 [anon:atexit handlers]
7cfe0a0000-7cfe0c0000 r--s 00000000 00:13 17058 /dev/__properties__/properties_serial
7cfe0c0000-7cfe0c2000 rw-p 00000000 00:00 0 [anon:System property context nodes]
7cfe0c2000-7cfe0c9000 r--s 00000000 00:13 16892 /dev/__properties__/property_info
7cfe0c9000-7cfe0ca000 rw-p 00000000 00:00 0 [anon:linker_alloc_vector]
7cfe0ca000-7cfe0cb000 rw-p 00000000 00:00 0 [anon:arc4random data]
7cfe0cb000-7cfe0cc000 rw-p 00000000 00:00 0 [anon:linker_alloc_vector]
7cfe0cc000-7cfe0cd000 rw-p 00000000 00:00 0 [anon:linker_alloc_small_objects]
7cfe0cd000-7cfe0ce000 rw-p 00000000 00:00 0 [anon:linker_alloc]
7cfe0ce000-7cfe0ee000 r--s 00000000 00:13 16938 /dev/__properties__/u:object_r:default_prop:s0
7cfe0ee000-7cfe0f0000 rw-p 00000000 00:00 0 [anon:linker_alloc_vector]
7cfe0f0000-7cfe0f1000 rw-p 00000000 00:00 0 [anon:linker_alloc_small_objects]
7cfe0f1000-7cfe0f2000 r--p 00000000 00:00 0 [anon:linker_alloc]
7cfe0f2000-7cfe112000 r--s 00000000 00:13 16936 /dev/__properties__/u:object_r:debug_prop:s0
7cfe112000-7cfe113000 ---p 00000000 00:00 0
7cfe113000-7cfe114000 rw-p 00000000 00:00 0
7cfe114000-7cfe115000 ---p 00000000 00:00 0
7cfe115000-7cfe135000 r--s 00000000 00:13 17058 /dev/__properties__/properties_serial
7cfe135000-7cfe137000 rw-p 00000000 00:00 0 [anon:System property context nodes]
7cfe137000-7cfe272000 r-xp 00000000 103:1d 7367 /system/bin/linker64
7cfe272000-7cfe279000 r--s 00000000 00:13 16892 /dev/__properties__/property_info
7cfe279000-7cfe27a000 r--p 00000000 00:00 0 [anon:linker_alloc]
7cfe27a000-7cfe27b000 rw-p 00000000 00:00 0 [anon:linker_alloc_vector]
7cfe27b000-7cfe27c000 rw-p 00000000 00:00 0 [anon:linker_alloc_small_objects]
7cfe27c000-7cfe27d000 rw-p 00000000 00:00 0 [anon:linker_alloc_vector]
7cfe27d000-7cfe27e000 rw-p 00000000 00:00 0 [anon:linker_alloc_small_objects]
7cfe27e000-7cfe27f000 r--p 00000000 00:00 0 [anon:atexit handlers]
7cfe27f000-7cfe280000 ---p 00000000 00:00 0 [anon:thread signal stack guard]
7cfe280000-7cfe284000 rw-p 00000000 00:00 0 [anon:thread signal stack]
7cfe284000-7cfe285000 rw-p 00000000 00:00 0 [anon:arc4random data]
7cfe285000-7cfe286000 ---p 00000000 00:00 0 [anon:bionic TLS guard]
7cfe286000-7cfe289000 rw-p 00000000 00:00 0 [anon:bionic TLS]
7cfe289000-7cfe28a000 ---p 00000000 00:00 0 [anon:bionic TLS guard]
7cfe28a000-7cfe28b000 r--p 00000000 00:00 0 [vvar]
7cfe28b000-7cfe28c000 r-xp 00000000 00:00 0 [vdso]
7cfe28c000-7cfe297000 r--p 00145000 103:1d 7367 /system/bin/linker64
7cfe297000-7cfe298000 rw-p 00150000 103:1d 7367 /system/bin/linker64
7cfe298000-7cfe29b000 rw-p 00000000 00:00 0
7cfe29b000-7cfe29c000 r--p 00000000 00:00 0
7cfe29c000-7cfe2a3000 rw-p 00000000 00:00 0
7fc781b000-7fc783c000 rw-p 00000000 00:00 0 [stack]

对于每个so文件会出现多次:

看它们的权限就明白了,r-xp是代码段,r--p是只读数据段,rw-p是读写数据段。

smap

  • 文件

这是进程使用内存的详细说明 , 比 maps 信息更详细

root

  • 目录

该符号链接指向该进程使用的根目录。通常为 /

stat

  • 文件

包含了进程的众多信息和与CPU相关的信息,所有值都是从系统启动开始累计到当前时刻的。

1
2
sagit:/proc/8423 # cat stat
8423 (.DungeonShooter) S 28120 28120 0 0 -1 1077952832 379799 22501 52 0 52306 7718 21 6 16 -4 142 0 128300431 10283085824 250149 18446744073709551615 411018997760 411019016668 549174228864 549174220000 484306082512 0 4608 1 1619039484 0 0 0 17 3 0 0 0 0 0 411019127392 411019128832 411669524480 549174229540 549174229639 549174229639 549174231006 0

解释:

  • pid = 8423 进程(包括轻量级进程,即线程)号
  • comm = .DungeonShooter 应用程序或命令的名字
  • task_state = S 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead
  • ppid = 28120 父进程ID
  • pgid = 28120(第二个) 线程组号
  • sid = 0 该任务所在的会话组ID
  • 后面字段参考文章没说......那天查到了在看看..

statm

  • 文件

包含了进程的内存页面相关的信息。

1
2
sagit:/proc/8423 # cat statm
2510783 250132 79509 5 0 2222893 0

解释:

  • size(pages):任务虚拟地址空间大小,VmSize/4
  • Resident(pages):正在使用的物理内存大小,VmRSS/4
  • Shared(pages):共享页数
  • Trs(pages):程序所拥有的可执行虚拟内存大小, VmExe/4
  • Lrs(pages):被映像倒任务的虚拟内存空间的库的大小,VmLib/4
  • Drs(pages):程序数据段和用户态的栈的大小,(VmData+ VmStk )/4
  • dt(pages):脏页数量

status

  • 文件

该文件包含该进程的众多信息:可执行文件名、当前状态、PID 和 PPID、实际及有效的 UID 和 GID、内存使用情况、以及其他。请注意,statstatm 现已过时。它们包含的信息现存于 status

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
sagit:/proc/8423 # cat status
Name: .DungeonShooter
State: S (sleeping)
Tgid: 8423
Pid: 8423
PPid: 28120
TracerPid: 0
Uid: 10164 10164 10164 10164
Gid: 10164 10164 10164 10164
Ngid: 0
FDSize: 512
Groups: 3002 3003 9997 20164 50164
VmPeak: 10244096 kB
VmSize: 10042076 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 1003672 kB
VmRSS: 997928 kB
VmData: 8882068 kB
VmStk: 8448 kB
VmExe: 20 kB
VmLib: 389332 kB
VmPTE: 4088 kB
VmPMD: 60 kB
VmSwap: 24468 kB
Threads: 142
SigQ: 0/22094
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000001200
SigIgn: 0000002800000001
SigCgt: 00000006608094fc
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000000000000000
CapAmb: 0000000000000000
Seccomp: 2

Speculation_Store_Bypass: unknown
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 3962
nonvoluntary_ctxt_switches: 545

解释:

  • Name: 应用程序或命令的名字
  • State: 任务的状态,运行/睡眠/僵死/
  • SleepAVG: 任务的平均等待时间(以nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的 sleep_avg 也会相应地更大一些,所以计算出来的优先级也会相应高一些。
  • Tgid: 线程组号
  • Pid: 任务ID
  • Ppid: 父进程ID
  • TracerPid: 接收跟踪该进程信息的进程的ID号
  • Uid: Uid euid suid fsuid
  • Gid: Gid egid sgid fsgid
  • Ngid
  • FDSize: 该字段是表示当前进程分配过的文件描述符的近似的最高值。如果刚开始打开了18个文件,则这里的FDSize等于32,若大于32,则以32为单位递增,例如33则是64;这个32的单位是依赖于系统位数的,如果是32位则是32,若是64位系统则是以64倍增。
  • Groups:
  • VmPeak: 虚拟内存峰值大小
  • VmSize(KB): 已经使用的虚拟内存大小
  • VmLck(KB): 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)
  • VmPin(KB):
  • VmHWM(KB): 进程所使用的物理内存的峰值
  • VmRSS(KB): 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)
  • VmData(KB): 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)
  • VmStk(KB): 任务在用户态的栈的大小 (stack_vm)
  • VmExe(KB): 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)
  • VmLib(KB): 被映像到任务的虚拟内存空间的库的大小 (exec_lib)
  • VmPTE: 该进程的所有页表的大小,单位:kb
  • VmPMD
  • VmSwap:进程所使用的交换区的大小
  • Threads: 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。
  • SigQ: 待处理信号的个数
  • SigPnd: 屏蔽位,存储了该线程的待处理信号
  • ShdPnd: 屏蔽位,存储了该线程组的待处理信号
  • SigBlk: 存放被阻塞的信号
  • SigIgn: 存放被忽略的信号
  • SigCgt: 存放被俘获到的信号
  • CapInh (Inheritable): 能被当前进程执行的程序的继承的能力
  • CapPrm (Permitted): 进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性
  • CapEff (Effective): 进程的有效能力
  • CapBnd: 是系统的边界能力,我们无法改变它。
  • Cpus_allowed: 指出该进程可以使用CPU的亲和性掩码,因为我们指定为4块CPU,所以这里就是F(1111)。
  • Cpus_allowed_list: 指出该进程可以使用CPU的列表,这里是0-7。
  • voluntary_ctxt_switches: 表示进程主动切换的次数.
  • nonvoluntary_ctxt_switches: 表示进程被动切换的次数.

你问没写到的?我懒得查了

mem

  • 文件

这是一个很重要的虚拟文件,它可以用来访问该进程的内存页面,你可以通过open、read、lseek函数来访问里面的内容。如果你用cat来打印里面的内容是会出错的。

mem是进程的内存映射文件 , 通过 smaps 可以获取各个模块的地址,将 mem 看做一个文件 , 使用 fseek 跳转到对应偏移地址中 , 可以读取对应地址内存中的数据。

task

  • 文件夹

task 目录是该进程的子线程

oom_adj

  • 文件

这是进程的优先级

oom_adj 值越小 , 进程优先级越高 , 越不容易被杀死

逆向相关大的

纯属总结

  • mem (!!!!)
    • 可以通过这个来修改内存,这很符合我对安卓逆向的想象。
  • maps / smaps
  • task
  • environ
  • cwd / cmd