欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 如何查看当前进程打开的文件描述符信息

如何查看当前进程打开的文件描述符信息

2025/4/25 13:36:07 来源:https://blog.csdn.net/JackLang/article/details/144277399  浏览:    关键词:如何查看当前进程打开的文件描述符信息

可以使用如下命令查看当前进程打开的文件描述符信息

# 查看指定进程打开的文件描述符
lsof -p <pid># 统计打开的文件描述符数量
lsof -p <pid> | wc -l

其结果各字段含义如下

  1. COMMAND:进程的名称(命令名)
    • 显示的是启动该进程的命令的前 9 个字符
  2. PID:Process ID
    • 进程的标识号
  3. USER:进程所有者的用户名
    • 显示进程所属的用户
  4. FD(File Descriptor)常见的文件描述符类型:
    • cwd: 当前工作目录
    • rtd: 根目录
    • txt: 程序文本(代码和数据)
    • mem: 内存映射文件
    • 0u: 标准输入(stdin)
    • 1u: 标准输出(stdout)
    • 2u: 标准错误(stderr)
    • [数字]r: 表示该文件被打开为只读模式
    • [数字]w: 表示该文件被打开为只写模式
    • [数字]u: 表示该文件被打开为读写模式
  5. TYPE:文件类型,常见的类型包括:
    • REG: 普通文件
    • DIR: 目录
    • CHR: 字符特殊文件
    • BLK: 块特殊文件
    • UNIX: UNIX 域套接字
    • FIFO: 先进先出队列
    • IPv4: IPv4 套接字
    • IPv6: IPv6 套接字
  6. DEVICE:以主设备号和次设备号显示的设备编号
    • 格式通常为 “主设备号,次设备号”
  7. SIZE/OFF:文件的大小或文件偏移量(以字节为单位)
    • 如果是字符特殊文件,则为空
  8. NODE:文件的索引节点号(inode number)
    • 标识文件系统中的具体文件
  9. NAME:文件的实际名称
    • 对于 Socket,显示为协议:地址
    • 对于管道和网络 Socket,显示为相关的地址

例1:so 文件的 python 内存映射

COMMAND   PID   USER   FD   TYPE     DEVICE  SIZE/OFF       NODE NAME
special-c  48 appops  mem    REG       8,17             19287503 /usr/local/python-3.10.12/lib/python3.10/lib-dynload/_lzma.cpython-310-x86_64-linux-gnu.so (path dev=0,437)
  1. special-c:这是一个被截断的进程名(只显示前9个字符)可能完整名称是 special-command 或类似的名称
  2. 48:这个进程的系统标识号是 48
  3. appops:这个进程是由 appops 用户运行的
  4. mem:mem 表示这是一个内存映射文件,通常用于加载动态链接库(.so 文件)
  5. REG:表示这是一个普通文件(regular file)
  6. 8,17:8 是主设备号,17 是次设备号,这通常表示某个磁盘分区
  7. 空白的 SIZE/OFF:对于内存映射文件,这个值通常为空
  8. 19287503:文件的 inode 号,用于在文件系统中唯一标识这个文件
  9. /usr/local/python-3.10.12/lib/python3.10/lib-dynload/_lzma.cpython-310-x86_64-linux-gnu.so (path dev=0,437):这是一个 Python 的动态链接库,具体是 lzma 压缩模块的实现。括号中的 path dev=0,437 表示文件系统设备号

综合解读:一个名为 special-c 的进程(PID 48),由 appops 用户运行,将 Python 的 lzma 压缩模块的动态链接库映射到了内存中。
这是 Python 3.10.12 的一个组件,这种内存映射通常发生在程序加载动态库时。

例 2:redis 链接

COMMAND   PID   USER   FD   TYPE     DEVICE  SIZE/OFF       NODE NAME
special-c  48 appops    4u  IPv4 2473315863       0t0        TCP online-94bcd5699-lg8ql:33946->110.120.10.234:6379 (ESTABLISHED)
  1. 4u:
    • 文件描述符号为 4
    • u 表示读写模式(read-write)
  2. IPv4: 使用 IPv4 协议
  3. 2473315863: 系统内部的套接字标识号
  4. 0t0: 文件偏移量(对于套接字来说通常为 0)
  5. TCP:连接协议
  6. 详细连接信息
    • 本地端: online-94bcd5699-lg8ql:33946:主机名看起来是一个 Kubernetes Pod 名称
    • 33946 是本地随机分配的端口号
    • 远程端: 110.120.10.234:6379
      • 110.120.10.234 是目标服务器 IP
      • 6379 是标准的 Redis 端口号
      • 连接状态: ESTABLISHED(已建立的连接),TCP 可能的连接状态包括:
        • ESTABLISHED: 连接已建立并能发送数据
        • LISTEN: 服务器在监听端口
        • TIME_WAIT: 连接已关闭,等待确保远端收到最后的 ACK
        • CLOSE_WAIT: 等待本地用户关闭连接
        • SYN_SENT: 正在尝试建立连接
        • SYN_RECV: 收到 SYN,等待确认

例 3:日志文件

COMMAND   PID   USER   FD   TYPE     DEVICE  SIZE/OFF       NODE NAME
special-c  48 appops    9w   REG       8,17 472746831   11272594 /home/app/logs/clear-db.log
  1. 9w:文件描述符号为 9,w 表示写模式(write-only),这是一个只写文件描述符
  2. REG:表示这是一个普通文件(regular file)
  3. 8,17:主设备号: 8(通常表示块设备),次设备号: 17,标识文件所在的具体磁盘分区
  4. 472746831:文件大小(字节)约等于 451 MB,这是一个相当大的日志文件
  5. 11272594: 文件的 inode 号,用于在文件系统中唯一标识这个文件
  6. /home/app/logs/clear-db.log:文件路径

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词