① proc简介
1) /proc是一个位于'内存'中的'伪'文件系统,也即'虚拟'文件系统;
特点: 它只存在内存当中,而'不占用'外存空间
备注: 通过'll -h'命令查看该目录下的文件,发现几乎所有的文件大小'都是 0'
2) 该目录下保存的并'不是真正'的文件和目录,存储的是当前'内核运行状态'的一系列'特殊'文件;
如: 'CPU' 信息、'负载'信息、系统'内存'信息、'磁盘I/O'信息等;
3) linux内核提供了一种'通过proc文件系统',在运行时访问内核内部的数据结构、改变内核设置的机制
备注: 可以通过 'vim、cat、less、more' 等命令查看'文件'的内容
场景1: 用户可以通过这些文件'查看'有关系统硬件及当前正在运行'进程'的信息;
场景2: 甚至可以通过'更改'其中某些文件来'改变内核'的运行状态;
② /proc目录
+++++++++++++++ "只讲解常用的" +++++++++++++++
1) /proc/sys/net -->"重点",但不在本'篇章'讲解
2) /proc/$pid -->"重点",以'进程的角度'理解
特点: 以'数字'命名的目录,它们是'进程'目录
备注1: 当前运行的'每一个进程'都有'对应的一个目'录在 /proc 下
备注2: 以进程的 'pid 号'为目录名,它们是'读取进程信息'的接口
[1]、/proc/pid/status 记录'进程'详细信息
[2]、/proc/pid/task/tid/status 记录'线程'详细信息
[3]、/proc/pid/limits 查看'进程'的限制情况
/proc/pid 进程号对应进程目录 | oom_adj | maps | smaps | mem | task | environ
limits: 保存了进程使用'资源的限制'信息、软限制、硬限制及单位
exe: 指向启动进程的'可执行文件'
cgroup: 文件、进程所属的控制组,格式为'冒号分隔'的三个字段,分别是'结构id'、子系统、控制组
task: 目录,每个线程一个子目录,'目录名'为'线程id'
stack: 读取进程的'内核堆栈'的'调试'信息
syscall: 查看'进程'挂在哪个'系统调用'上
通过/proc的stack和syscall查看Linux内核态调用栈来定位问题 stack详细解读
③ 常见应用场景
++++++++++++++ 查看'进程'打开的'文件描述符'个数 ++++++++++++++
ls -l /proc/$pid/fd
+++++++++++ "查看进程启动的上下文" +++++++++++
1) cwd -->"哪个目录"执行
2) environ -->"环境变量"
3) exe -->"指定命令,不包含参数"
4) cmdline -->"进程启动的完整参数"
备注: 'pid'通过ps -ef | grep pid_name 获取
5) 学会使用'man proc'进行手册查询
④ 遗留
在'日常'性能分析或者'排错'的过程中,我们会利用'/proc'的哪些信息?