温馨提示×

怎么查看进程打开文件

小樊
40
2026-09-21 18:37:00
栏目: 编程语言

查看“进程打开了哪些文件”通常取决于你使用的操作系统。下面按 Linux / macOSWindows 分别说明。


一、Linux / macOS

1. 使用 lsof(最常用)

lsof -p <PID>

示例:

lsof -p 1234

查看某进程打开的所有类型文件(包括普通文件、socket、管道):

lsof -p 1234

只看普通文件:

lsof -p 1234 | grep REG

2. 通过 /proc(Linux 专用)

ls -l /proc/<PID>/fd

示例:

ls -l /proc/1234/fd

说明:

  • 每个 fd 是一个符号链接
  • 指向打开的文件、socket、管道等

3. 使用 fuser

查看哪些进程打开了某个文件:

fuser /var/log/messages

反向查看进程打开的文件也可用:

fuser -v /path/to/file

4. 查找某个文件被谁打开

lsof /path/to/file

二、Windows

1. 使用 PowerShell

Get-Process -Id <PID> | Select-Object -ExpandProperty Modules

更完整地查看打开的文件句柄(需要管理员):

Get-Process -Id <PID> | Get-ChildItem

(部分场景有限)


2. 使用 handle.exe(Sysinternals 工具)

下载 Sysinternals Suite:

handle.exe -p <PID>

查看谁打开了某文件:

handle.exe C:\path\to\file

3. 任务管理器(图形界面)

  1. 打开任务管理器
  2. 详细信息
  3. 右键列 → 勾选“命令行 / 句柄”
  4. 或使用“资源监视器” → CPU → 关联的句柄

三、常见场景示例

查看 Nginx 进程打开的文件

pgrep nginx
lsof -p <nginx_pid>

查看某个端口被谁占用

lsof -i :8080

如果你能告诉我:

  • 操作系统
  • 是“按进程查文件”还是“按文件查进程”

我可以给你更精确的命令。

0