linux /proc伪文件系统是内核数据结构的接口,是异常强大的,大部分的文件都是只读的。本文主要是根据man proc来补充说明(未完待续)。

  • /proc/[pid]
    每一个正在运行的进程都对应有这样一个伪目录,目录名为该进程的pid。每个伪目录下面都有以下伪文件或伪目录:

    • /proc/[pid]/auxv
      包含ELF解析信息(ELF就是linux系统二进制可执行文件的文件格式),auxv 是 AUXiliary Vector简写。每个条目的格式就是:一个unsigned longID加上一个unsigned long数值。这个AUXV是什么意思呢? 我们可以通过加上LD_SHOW_AUXV=1 程序名可以获取具体的数值:

      [heidong@HEIDONGVM 2218]$ LD_SHOW_AUXV=1 /bin/sh
      AT_SYSINFO_EHDR: 0x7fff173d8000
      AT_HWCAP: 178bf3ff
      AT_PAGESZ: 4096
      AT_CLKTCK: 100
      AT_PHDR: 0x400040
      AT_PHENT: 56
      AT_PHNUM: 9
      AT_BASE: 0x7fd32ed59000
      AT_FLAGS: 0x0
      AT_ENTRY: 0x41aef0
      AT_UID: 500
      AT_EUID: 500
      AT_GID: 500
      AT_EGID: 500
      AT_SECURE: 0
      AT_RANDOM: 0x7fff17230579
      AT_EXECFN: /bin/sh
      AT_PLATFORM: x86_64
      sh-4.1$
      对应的AT_*的含义可在/usr/include/elf.h找到。
      相关参考: What does /proc/PID/auxv mean exactly?关于ELF的辅助向量

    • /proc/[pid]/cmdline
      包含非僵死进程的命令行启动参数,该文件包含"\0"。如:

      [heidong@HEIDONGVM 2238]$ cat cmdline
      bash[heidong@HEIDONGVM 2238]$

    • /proc/[pid]/coredump_filter
      用于控制哪些内存段写入到core文件,16进制显示,是与mmap映射类型的位掩码。默认0,1,4,5(如果内核编译时定义CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS),所以默认值是33。掩码含义是:
      bit 0 dump匿名私有映射.
      bit 1 dump匿名共享映射.
      bit 2 dump基于文件的私有映射.
      bit 3 dump基于文件的共享映射.
      bit 4(linux 2.6.24) dump elf 头.
      bit 5(linux 2.6.28) dump私有页面(private huge pages). bit 6(linux 2.6.28) dump共享页面(shared huge pages).

    • /proc/[pid]/cpuset
      // todo

    • /proc/[pid]/cwd
      进程当前工作目录的软连接。对于多线程的程序,如果主线程退出或挂掉了,子线程还存在,这个连接时无效的。去到当前工作目录:

      $ cd /proc/20/cwd; /bin/pwd

    • /proc/[pid]/environ
      进程环境变量,每个条目都是以"\0"结束。可用这种方法显示:

      [heidong@HEIDONGVM 2238]$ (cat /proc/2238/environ; echo) | tr ‘\000’ ‘\n’

    • /proc/[pid]/exe
      进程可执行文件在软连接。对于多线程的程序,如果主线程退出或挂掉了,子线程还存在,这个连接时无效的。

    • /proc/[pid]/fd/
      打开文件文件描述符目录在连接。对于多线程的程序,如果主线程退出或挂掉了,子线程还存在,这个连接时无效的。/proc/self/fd/N/dev/fd/N是一样在。补充说明,对于只知道fd怎么找对于的文件呢?答案是很简单的,直接用readlink函数,查看对于该目录下文件的连接就可以了。

    • /proc/[pid]/fdinfo/
      这个目录是和/proc/[pid]/fd/对应的,就是对于没个文件的当前偏移和打开标示。如:

      [heidong@HEIDONGVM fdinfo]$ cat 165
      pos: 0
      flags: 0100002
      [heidong@HEIDONGVM fdinfo]$

    • /proc/[pid]/limits
      limits信息。和getrlimit获取的信息是一样的。如:

      [heidong@HEIDONGVM 3500]$ cat limits
      Limit Soft Limit Hard Limit Units
      Max cpu time unlimited unlimited seconds
      Max file size unlimited unlimited bytes
      Max data size unlimited unlimited bytes
      Max stack size 10485760 unlimited bytes
      Max core file size unlimited unlimited bytes
      Max resident set unlimited unlimited bytes
      Max processes 1024 14864 processes Max open files 4096 4096 files
      Max locked memory 65536 65536 bytes
      Max address space unlimited unlimited bytes
      Max file locks unlimited unlimited locks
      Max pending signals 14864 14864 signals
      Max msgqueue size 819200 819200 bytes
      Max nice priority 0 0
      Max realtime priority 0 0
      Max realtime timeout unlimited unlimited us

    • /proc/[pid]/maps
      内存映射的地址和权限。如:

      [heidong@HEIDONGVM 3890]$ cat maps 00400000-00410000 r-xp 00000000 fd:00 1072484 /usr/bin/groff 0060f000-00610000 rw-p 0000f000 fd:00 1072484 /usr/bin/groff 00610000-00614000 rw-p 00000000 00:00 0 0080f000-00811000 rw-p 0000f000 fd:00 1072484 /usr/bin/groff 01c6f000-01c90000 rw-p 00000000 00:00 0 [heap]

    • /proc/[pid]/mem
      进程对应的内存,可以通过open, read, lseek访问。

  • /proc/apm

  • /proc/bus

  • /proc/cmdline

  • /proc/config.gz

  • /proc/cpuinfo

  • /proc/devices

  • /proc/diskstats

  • /proc/dma

  • /proc/driver

  • /proc/execdomains

  • /proc/fb

  • /proc/filesystems

  • /proc/fs

  • /proc/ide

  • /proc/interrupts

  • /proc/iomem

  • /proc/ioports

  • /proc/kallsyms

  • /proc/kcore

  • /proc/kmsg

  • /proc/ksyms

  • /proc/loadavg

  • /proc/locks

  • /proc/malloc

  • /proc/meminfo

  • /proc/modules

  • /proc/mounts

  • /proc/mtrr

  • /proc/net

  • /proc/partitions

  • /proc/pci

  • /proc/scsi

  • /proc/self

  • /proc/slabinfo

  • /proc/stat

  • /proc/swaps

  • /proc/sys

  • /proc/sysrq-trigger

  • /proc/sysvipc

  • /proc/tty

  • /proc/uptime

  • /proc/version

  • /proc/vmstat

  • /proc/zoneinfo