/proc 是一种存在于内存中的伪文件系统(pseudo filesystem),它的引入是为了可以从用户空间中读取Linux内核的内部数据结构。其中大多数伪文件都是只读的,不过有一些,比如/proc/sys/net/ipv4/forward(在第8章中讲过),可用于微调系统行为。

实战演练

/proc目录中包含了多个文件和目录。其中大多数文件可以使用catlessmore命令来查看,其内容都是纯文本格式。

  1. $ ls /proc
  2. 1 buddyinfo cpuinfo execdomains irq kpagecgroup meminfo pagetypeinfo stat tty
  3. 28 bus crypto filesystems kallsyms kpagecount misc partitions swaps uptime
  4. 7 cgroups devices fs kcore kpageflags modules sched_debug sys version
  5. 8 cmdline diskstats interrupts keys loadavg mounts schedstat sysvipc vmallocinfo
  6. 9 config.gz dma iomem key-users locks mtrr self thread-self vmstat
  7. acpi consoles driver ioports kmsg mdstat net softirqs timer_list zoneinfo
  1. $ less /proc/cpuinfo

image.png

  1. $ more /proc/cpuinfo

image.png
系统中每一个运行的进程在/proc中都有一个对应的目录,目录名和进程ID相同。

Bash为例,它的PID4295(pgrep bash),那么就会存在一个对应的目录/proc/4295。该目录中包含了大量有关进程的信息。/proc/PID中的文件包括以下几个。

  • environ:包含与进程相关的环境变量。使用cat /proc/4295/environ可以显示所有传递给进程4295的环境变量。

    1. [root@dev workspace]# cat /proc/1/environ
    2. WSL2_CROSS_DISTRO=/wslHhaPGCWSL2_GUI_APPS_ENABLED=1WSL2_SYSTEM_DISTRO_SHARE=/wsljfCDOG
  • cwd:这是一个到进程工作目录的符号链接。

  • exe:这是一个到进程所对应的可执行文件的符号链接。

    1. $ readlink /proc/4295/exe
    2. /bin/bash
  • fd:这是一个目录,包含了进程所用到的文件描述符。012分别对应于stdinstdoutstderr

  • io:该文件显示了进程所读/写的字符数。