proc是一个位于内存中的伪文件系统,该目录下面保存的不是真正的文件和目录,而是一些“运行时”信息,如系统内存,磁盘IO等。我们可以通过这些文件查看系统当前正在运行的进程信息,甚至可以利用proc目录找回被删除的文件。
/proc目录下的文件保存的是整个系统的信息,名字是数字的目录保存的是进程的信息,目录名字正是进程的id,因此所有数字命名的目录的总和就是当前系统运行进程的总和。
比如:
[root@Ansible ~]# ps -ef|grep ssh
root 6898 1 0 18:59 ? 00:00:00 /usr/sbin/sshd -D
[root@Ansible ~]# ls /proc/6898/
attr cmdline environ io mem ns pagemap sched stack task
autogroup comm exe limits mountinfo numa_maps patch_state schedstat stat timers
auxv coredump_filter fd loginuid mounts oom_adj personality sessionid statm uid_map
cgroup cpuset fdinfo map_files mountstats oom_score projid_map setgroups status wchan
clear_refs cwd gid_map maps net oom_score_adj root smaps syscall
###########
1)cmdline保存了进程的启动命令。
[root@Ansible ~]# cat /proc/6898/cmdline
/usr/sbin/sshd-D
2)cwd是一个符号链接,指向进程的运行目录。
3)exe是一个软链接,指向启动进程的可执行文件,通过此文件可以启动当前进程的一个拷贝。
4)environ包含与进程相关的环境变量。
5)fd目录包含了进程打开的每一个文件的文件描述符,描述符是指向实际文件的一个符号链接。
fd目录下的文件与文件一一对应,我们可以通过fd目录下的文件个数统计当前进程打开的文件句柄数,也可以直接读取文件内容就像读取实际的文件。
6)limits保存了进程使用资源的限制信息,包括软硬限制以及取值的单位。
7)task包含了当前进程所运行的每一个线程的相关信息,目录以每个线程号(tid)命令。