查找了很多资料才区分出来,这里不主要介绍概念,而是告诉大家区分的关键点
文件描述符(file descriptor, fd):是文件描述符表中的一种索引标识,标识对象除了普通文件和目录外,还包括管道、FIFO(命名管道)、Socket、终端、设备等
文件描述符表(file descriptor table):每个进程会在其进程控制块(PCB)内维护属于自己的文件描述符表
打开文件表(open file description table):系统内所有打开的文件及其相关的元信息,该结构称为打开文件表
文件描述(file description)= 文件句柄(file handle):打开文件表中的一行称为一条文件描述,也经常称为文件句柄
举例:两个程序的进程打开的同一文件状态不一样,一个进程对这个文件进行写的操作,另外一个进程进行读的操作,就产生了两个文件描述符和一个文件句柄
下面是linux命令查看:
- 查看进程文件描述符
lsof -p pid | wc -l
- 查看进程使用句柄数
保存着这个服务对文件执行读写操作的文件描述符存在状态,只记录读写执行文件这种状态 ,不会记录MEM,TXT这种的
这也是为什么这个命令ls -l /proc/pid/fd/ | wc -l执行结果的数值比lsof -p pid | wc -l 的执行结果小
ls -l /proc/pid/fd/ | wc -l
- 查看操作系统当前的情况
分别输出已分配文件句柄(已打开的文件数目)的数目、 已分配但未使用文件句柄的数目、 文件句柄的最大数目
cat /proc/sys/fs/file-nr