一、背景知识
在 Linux 中,/proc 是一个特殊的文件系统,被称为 “proc 文件系统” 或者简称为 “procfs”。它是一个【虚拟】的文件系统,不占用任何磁盘空间,而是由内核动态生成的,用于向用户空间提供内核内部状态和系统信息的视图。
/proc 目录下包含了多个子目录和文件,每个目录和文件代表了系统的一个方面。特别是/proc 下的【数字】目录代表了当前正在运行的进程的进程标识符 【PID】。例如如果系统中有 PID 为 1234 的进程,那么 /proc/1234 就是与该进程相关的信息目录。
二、知识点
以下是一些查看 /proc 进程目录的方法:
- 查看所有进程的列表:
○ ls /proc
命令可以看到当前所有活动进程的 PID
- 查看单个进程的详细信息:
○ cat /proc/<pid>/status
查看 PID 为 1234 的进程的信息
这个 status 文件包含了进程的详细信息,如进程名、状态、父进程 ID (PPID)、线程 ID (TID) 等。
- 查看进程的命令行参数:
○ cat /proc/<pid>/cmdline
可以看到进程启动时的完整命令行参数
- 查看进程的当前工作目录:
○ ls -ld /proc/<pid>/cwd
可以看到指向进程当前工作目录的符号链接。
- 查看进程打开的文件描述符:
○ 目录 /proc/<pid>/fd 包含了进程打开的所有文件描述符,每个文件描述符是一个指向实际文件的链接。
- 查看进程的内存映射:
○ cat /proc/<pid>/maps
可以查看进程的虚拟内存布局,包括共享库、堆、栈等的映射。
- 要查看整个系统的信息
/proc/meminfo 内存信息
/proc/cpuinfo CPU 信息
/proc/loadavg 负载平均
/proc/swaps 交换分区
/proc/filesystems 文件系统
/proc/interrupts 中断
【注意】/proc 中的大多数文件都可以像普通文本文件那样读取,但它们实际上是由内核实时生成的,因此可以立即反映系统当前的状态
三、/proc/下文件含义
/proc// 目录下的子目录和文件提供了关于特定进程(由 PID 表示)的详细信息
- exe
○ 这是一个符号链接,指向执行该进程的可执行文件的路径。
- cmdline
○ 包含了启动该进程时所使用的命令行参数。参数之间用空字符(\0)分隔。
- root
○ 包含了一个挂载点,该挂载点从进程的视角看起来像是根目录。这是由于 chroot 和 pivot_root 系统调用的影响。
- cwd
○ 包含了一个指向进程当前工作目录的符号链接。
- fd
○ 这个目录包含了一系列的符号链接,每个链接代表一个打开的文件描述符,指向实际的文件或设备。
- maps
○ 显示了进程的虚拟内存映射,包括起始地址、结束地址、权限、偏移量、设备、inode 和路径。
- mem
○ 允许直接访问进程的内存空间。出于安全考虑,通常需要 root 权限才能访问,并且现代的 Linux 发行版可能禁用了这个文件的访问。
- stat
○ 提供了进程的状态信息,包括进程 ID、父进程 ID、组 ID、会话 ID、控制终端、优先级、nice 值、状态、虚拟内存大小、驻留内存大小、共享内存大小、文本段大小、数据段大小、堆栈大小、上下文切换次数、voluntary 和 involuntary 等。
- status
○ 显示了进程的状态信息,以人类可读的格式,包括类型、状态、PID、PPID、线程 ID、线程组 leader、父进程的线程组 leader、会话 ID、控制终端、优先级、nice 值、虚拟内存大小、驻留内存大小、共享内存大小、文本段大小、数据段大小、堆栈大小、上下文切换次数、voluntary 和 involuntary 等。
- io
○ 显示了进程的 I/O 统计信息,如字节读写、系统调用次数等。
- stack
○ 这个文件允许访问进程的栈信息,但同样,通常需要 root 权限才能访问。
久违 2024.08.13