Linux Proc文件系统详解



Linux Proc文件系统详解

Proc文件系统是一个伪文件系统,做为一个特殊接口来访问内核,常常挂载在/proc下,里面的大多数文件时只读的,但是我们仍然可以设置其中一些变量来改变内核设置。

通过Man5 proc  来进行查阅proc文件系统的详细信息。

我们可以用cat more greplinux命令来进行查看proc文件系统的内容

I)进程相关

系统任何时刻正在运行的用户进程在/proc下都有自己的一个目录,目录的名称就是进程号的十进制表示。如/proc/1

/proc/self是链接到正在访问proc目录的那个进程的符号链接。

每个进程进程号目录下有以下的文件:

cmdline文件:进程的命令行,包括程序的名称和所有的参数,僵死进程或者被交换出去的进程可能没有任何内容。如cat ./self/cmdline

cwd目录:进程当前工作目录的符号链接

exe文件:指向当前进程运行的二进制可执行程序的符号链接,可以直接运行它

environ文件:记录了进程的环境信息,单个的环境字符串之间由空字节分隔,以文件结束标志作为环境结束的标志

 

fd目录:为每个打开得文件描述符提供一个入口,它是到实际文件的索引节点的符号链接。每个索引节点包含节点所在的设备信息、加锁信息、文件的模式和类型、到该文件的链接、文件所有者和所有组ID、文件字节数等。

maps文件:

address                perms                            offset   dev         inode      pathname

10000000-1064b000  r-xp          00000000 01:00         13         /ramdisk/kdvmt.linux (deleted)

1065b000-106c6000  rwxp         0064b000 01:00         13         /ramdisk/kdvmt.linux (deleted)

106c6000-1108d000  rwxp                  106c6000 00:00                   0

30000000-30120000  rw-p          30000000 00:00         0

30120000-30121000  rw-s 22000000 1f:09          8          /usr/dev/hpi2

30121000-30122000  rw-s 21000000 1f:09          7          /usr/dev/hpi1

30122000-30123000  rw-s 20000000 1f:09          6          /usr/dev/hpi0

30123000-30c83000  rw-p          30123000 00:00         0

 

                   r = read

                   w = write

                   x = execute

                   s = shared

                   p = private (copy on write)

offset是文件的偏移量, dev 是设备号(主设备号:从设备号), inode 则是设备的节点号. 0 表明没有节点与内存相对应, 就象 bss 的情形.

root文件:root目录的符号链接,可以由chroot系统调用改变

stat文件:包含了通常由PS显示的有关某个进程的大多数信息。

pid %d

进程标识.

comm %s

可执行文件的文件名, 包括路径. 该文件是否可见取决于该文件是否已被交换出内存.

state %c

";RSDZT"; 中的一个, R 是正在运行, S 是在可中断的就绪态中睡眠, D 是在不可中断的等待或交换态中睡眠, Z 是僵死, T 是被跟踪或被停止(由于收到信号).

ppid %d

父进程 PID.

pgrp %d

进程的进程组 ID.

session %d

进程的会话 ID.

tty %d

进程所使用终端.

tpgid %d

当前拥有该进程所连接终端的进程所在的进程组 ID.

flags %u

进程标志,依赖内核版本

minflt %u

进程所导致的小错误(minor faults)数目, 这样的小错误(minorfaults)不需要从磁盘重新载入一个内存页.

cminflt %u

进程及其子进程所导致的小错误(minor faults)数目.

majflt %u

进程所导致的大错误(major faults)数目, 这样的大错误(majorfaults)需要重新载入内存页.

cmajflt %u

进程及其子进程所导致的大错误(major faults)数目.

utime %d

用户时间——进程被调度进用户态的时间( jiffy 为单位).

stime %d

系统时间——进程被调度进内核态的时间, jiffy 为单位.

cutime %d

累计用户时间——进程及其子进程被调度进用户态的时间, jiffy 为单位.

cstime %d

累计系统时间——进程及其子进程被调度进内核态的时间, jiffy 为单位.

priority %d

标准优先数只再加上 15, 在内核里该值总是正的.

nice %ld

nice

itrealvalue%u

下一个SIGALARM信号到来的延时, jiffy 为单位.

starttime %d

进程自系统启动以来的时间, jiffy 为单位.

vsize %u

虚拟内存大小.

rss %u

Resident Set Size(驻留大小): 进程所占用的真实内存大小, 以页为单位, 为便于管理而减去了 3. rss 只包括代码段, 数据

以及堆栈的空间, 但不包括尚未要求装入内存的或已被交换出去的.

rlim %u

当前进程的 rss 限制, 以字节为单位, 通常为 2,147,483,647.

startcode %u

代码段部分地址下限.

endcode %u

代码段部分地址上限.

startstack %u

堆栈开始地址.

kstkesp %u

esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.

kstkeip %u

EIP(32 位指令指针)的当前值.

signal %d

待处理信号的 bitmap(通常为 0).

blocked %d

被阻塞信号的 bitmap( shell 通常是 0, 2)

sigignore %d

被忽略信号的 bitmap.

sigcatch %d

被俘获信号的 bitmap.

wchan %u

进程睡眠的内核函数名

nswap %lu

交换出去的页数

cnswap %lu

累计交换出去的页数

exit_signal %d

退出时发送的信号名

 processor %d

 SMP处理器中最后执行的CPU ID

status文件:进程状态,以更好的可读格式显示出来。

statm文件:进程对内存的使用情况。

                    size      total program size

               resident   resident set size

               share      shared pages

               text       text (code)

               lib        library

               data       data/stack

               dt         dirty pages (unused in Linux 2.6)

task目录:多线程程序中,task目录里面包含每个线程号的子目录,目录下内容与进程号目录相同

II)其他系统信息

/proc

cmdline文件:内核的启动命令行,通过bootloader设置,grub或者u-boot

cpuinfo文件:提供CPU的多种信息

devices文件:列出字符设备和快设备的主设备号,以及分配到这些设备号的设备名称

dma文件:驱动程序保留的DMA通道和保留它们的驱动程序名称

file systems文件:列出可以使用的文件类型

interrupts文件:列出系统注册过的中断

ioports文件:列出了诸如磁盘驱动器、声卡等设备的IO端口范围

kcore文件:系统的物理内存以core文件格式保存的文件

kmsg文件:检索printk生成的内核信息,同dmesg

ksysm文件:列出已经登记的内核符号,给出了变量或者函数的地址

loadavg文件:列出以几个不同的时间间隔计算的系统平均负载,前三个数字表示过去1分钟、5分钟、15分钟运行队列的平均负载,随

后正在运行任务数/活跃任务数,最后是上次使用CPU的进程号

                                                                             1.061.06 0.95 6/85 214

locks文件:包含在打开的文件上的加锁信息,由/linux/fs/lock.c中的get_locks_status函数产生

mdstat文件:md设备驱动程序控制的RAID设备信息

meminfo文件:给出了内存状态的信息,显示出系统中空闲内存、已用物理内存和交换内存的总量,还显示出内核使用的共享内存和缓

冲区总量,free命令就是读取这个的

misc文件:报告内核函数misc_register函数登记的设备驱动程序

modues文件:给出可加载内核模块的信息,lsmod由此得出

mounts文件:挂载信息

rtc文件:硬件实时时钟的信息

stat文件:cput利用率、磁盘、内存页、内存对换、全部中断、接触开关以及上次自举时间(1970.1.1以来的秒数)

version文件:说明系统正在运行的内核版本

slabinfo文件:内核slab控制器使用情况

 

IIInet目录

arp文件:arp

dev文件:来自网络设备的统计,ifconfig命令就是解析它而来

dev_mcast:列出链路层多播组

igmp:加入的IGMP多播组

netlinknetlingk套接口信息

netstat:网络流量的多种统计

raw:原始套接口的套接口表

route:静态路由表

rpc:包含RPC信息的目录

rt_cache:路由缓冲

snmpsnmpagentip/icmp/tcp/udp协议统计,各行交替给出字段名和值

sockstat:列出使用tcp/udp/raw/pac/syn_cookies的数量

tcpTCP连接的套接口表

udpUDP连接的套接口表

unixUNIX域套接口的套接口表

其他网卡驱动加入的相关信息

 

IV)其他繁多的目录

proc/scsi子目录:包含一个列出所有检测到的scsi设备的文件,并且为每个控制器驱动程序建立一个目录,这个目录下面又为每个驱动实例提供一个子目录

 

proc/sys目录:该目录下的文件基本都是内核中的一些变量,我们可以通过改变这些变量的值来改变内核的参数。该目录内容较多,且一般不常用,例子:

                              ./fs/file-max:内核分配的文件句柄的最大数目

                              ./fs/file-nr:已经分配的文件句柄数、已使用的句柄数、最大数

                              ./kernel/osrelase:内核版本号

                              ./kernel/rtsig-nr:当前队列中实时信号的数目

          ./kernel/shmall:共享内存的最大值

                              ./core/rmem_default:套接口读缓冲的默认值

                              ./core/wmem_default:套接口写缓冲的默认值

                              ./net/ipv4/ip_forward:是否允许内部转发(net目录包含繁多的各种网络参数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值