温馨提示×

如何查看进程打开文件

小樊
108
2026-07-21 20:15:43
栏目: 编程语言

在类 Unix 系统(Linux、macOS)中,查看进程打开了哪些文件常用以下几种方法,按使用频率从高到低说明。


一、使用 lsof(最常用、最直观)

1. 查看某个进程打开的文件

lsof -p <PID>

示例:

lsof -p 1234

输出包括:

  • 文件路径
  • 文件类型(REG / DIR / FIFO / socket 等)
  • 文件描述符(FD)

2. 只看普通文件(排除 socket、管道等)

lsof -p 1234 | grep REG

3. 查看某个文件被哪些进程打开

lsof /path/to/file

4. 查看某个用户打开的文件

lsof -u username

二、通过 /proc 文件系统(Linux 特有,最底层)

1. 查看进程打开的文件

ls -l /proc/<PID>/fd

示例:

ls -l /proc/1234/fd

输出示例:

0 -> /dev/null
1 -> /dev/null
2 -> /dev/null
3 -> /var/log/app.log

2. 查看进程当前工作目录

ls -l /proc/<PID>/cwd

3. 查看进程打开的文件数

ls /proc/<PID>/fd | wc -l

三、使用 ps + /proc(辅助)

查看进程 PID:

ps aux | grep process_name

然后结合 /proc/<PID>/fd 使用。


四、macOS 特有方式

macOS 也支持 lsof,但 /proc 不完整,推荐直接用:

lsof -p <PID>

或查看某个端口:

lsof -i :8080

五、常见排查场景

1. 查看“文件被占用但删不掉”

lsof | grep deleted

2. 查看进程打开了多少文件(句柄数)

lsof -p <PID> | wc -l

或:

cat /proc/<PID>/limits | grep "open files"

3. 查看网络相关文件(socket)

lsof -i

六、权限说明

  • 查看自己的进程:无需 root
  • 查看其他用户或系统进程:通常需要 sudo
sudo lsof -p <PID>

七、总结速查表

需求 命令
查看进程打开的文件 lsof -p PID
查看文件被谁打开 lsof 文件路径
Linux 底层查看 /proc/PID/fd
查看删除但未释放的文件 `lsof
查看网络文件 lsof -i

如果你愿意,可以告诉我:

  • Linux 还是 macOS
  • 是想查 某个进程某个文件,还是 fd 泄漏问题

我可以给你更精确的命令和排查思路。

0