Linux proc目录结构
January 7, 2021 Linux 访问: 67 次
Everyone knows,在linux上,一切皆文件
proc目录结构
proc位置在根目录下,是进程信息为文件系统,在/proc
里的大多数文件都是只读的,但也可以通过写一些文件来改变内核变量
数字
在/proc
目录里,每个正在运行的进程都有一个以该进程ID命名的子目录
cmdline
该文件保存了进程的完整命令行。
cwd
一个符号连接, 指向进程当前的工作目录
environ
该文件保存进程的环境变量,各项之间以空字符分隔
exe
是一个符号连接, 指向被执行的二进制代码
fd
这是一个目录,里面是进程所打开的每个文件都有一个符号链接在,eg:0 是标准输入, 1 是标准输出, 2 是标准错误
maps
该文件包含当前的映象内存区及他们的访问权限
root
依靠系统调用 chroot(2), unix 和 linux 可以让 每个进程有各自的文件系统根目录
stat
进程状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
status
与stat所提供信息类似,但可读性较好
root@ubuntu /proc/16786
❯ cat stat
16786 (test) S 15558 16786 15558 34835 16786 4194304 103 0 0 0 0 0 0 0 20 0 1 0 822384 4456448 159 18446744073709551615 4194304 4196252 140725439650816 0 0 0 0 0 0 1 0 0 17 1 0 0 0 0 0 6295056 6295616 26357760 140725439657628 140725439657651 140725439657651 140725439660017 0
root@ubuntu /proc/16786
❯ cat status
Name: test
Umask: 0022
State: S (sleeping)
Tgid: 16786
Ngid: 0
Pid: 16786
PPid: 15558
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups: 0
NStgid: 16786
NSpid: 16786
NSpgid: 16786
NSsid: 15558
VmPeak: 4352 kB
VmSize: 4352 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 636 kB
VmRSS: 636 kB
RssAnon: 68 kB
RssFile: 568 kB
RssShmem: 0 kB
VmData: 180 kB
VmStk: 132 kB
VmExe: 4 kB
VmLib: 1952 kB
VmPTE: 56 kB
VmSwap: 0 kB
HugetlbPages: 0 kB
CoreDumping: 0
Threads: 1
SigQ: 0/7710
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp: 0
Speculation_Store_Bypass: vulnerable
Cpus_allowed: ffffffff
Cpus_allowed_list: 0-31
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 3
nonvoluntary_ctxt_switches: 0
task
保存着当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中
cpuinfo
保存了CPU 以及体系架构依赖条目的列表
root@ubuntu /proc
❯ cat cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
stepping : 13
microcode : 0xd6
cpu MHz : 2400.000
cache size : 16384 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xsaves dtherm arat pln pts
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips : 4800.00
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
stepping : 13
microcode : 0xd6
cpu MHz : 2400.000
cache size : 16384 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xsaves dtherm arat pln pts
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
bogomips : 4800.00
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
devices
主设备号及设备组的列表, 文本格式
filesystems
以文本格式列出了被编译进内核的文件系统
linux进程状态
R (TASK_RUNNING),可执行状态
只有在该状态的进程才可能在CPU上运行。同一时刻可能有多个进程处于可执行状态,这些进程的进程控制块结构被放入对应的CPU的可执行队列中,一个进程最多只能出现在一个CPU的可执行队列中。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行