Linux proc目录结构

January 7, 2021 Linux 访问: 116 次

Everyone knows,在linux上,一切皆文件

proc目录结构

16099161754794.jpg

proc位置在根目录下,是进程信息为文件系统,在/proc里的大多数文件都是只读的,但也可以通过写一些文件来改变内核变量

数字

/proc目录里,每个正在运行的进程都有一个以该进程ID命名的子目录

cmdline

该文件保存了进程的完整命令行。
16099164523360.jpg

cwd

一个符号连接, 指向进程当前的工作目录
16099165588814.jpg

environ

该文件保存进程的环境变量,各项之间以空字符分隔
16099173018801.jpg

exe

是一个符号连接, 指向被执行的二进制代码
16099173529920.jpg

fd

这是一个目录,里面是进程所打开的每个文件都有一个符号链接在,eg:0 是标准输入, 1 是标准输出, 2 是标准错误

maps

该文件包含当前的映象内存区及他们的访问权限
16099177948414.jpg

root

依靠系统调用 chroot(2), unix 和 linux 可以让 每个进程有各自的文件系统根目录
16099180167266.jpg

stat

进程状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
16099197041202.jpg

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

以文本格式列出了被编译进内核的文件系统
16099204579780.jpg

linux进程状态

R (TASK_RUNNING),可执行状态

只有在该状态的进程才可能在CPU上运行。同一时刻可能有多个进程处于可执行状态,这些进程的进程控制块结构被放入对应的CPU的可执行队列中,一个进程最多只能出现在一个CPU的可执行队列中。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行

S (TASK_INTERRUPTIBLE),可中断的睡眠状态

D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态

T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态

Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程

添加新评论