要确认文件是否被进程以写模式持续打开,需用sudo lsof /path/to/file,筛选FD含w/u、TYPE为REG、NAME精确匹配的条目,并排除cwd/txt/mem;再观察SIZE/OFF是否增长以判断实时写入。

要查某个文件是否正被进程以写模式(比如日志持续追加)打开,关键不是只看“是否打开”,而是确认 FD 列含 w 或 u(读写)、且 TYPE 是 REG(普通文件),同时 NAME 列精确匹配目标路径。
确认写模式打开的进程
执行以下命令(需 root 权限,否则可能漏掉其他用户进程):
sudo lsof /path/to/your/file
输出中重点关注三列:
-
FD:值为
1w、3u、7w等——末尾带w表示只写,u表示读写;不含r单独出现即非只读 -
TYPE:应为
REG(常规文件),排除DIR、IPv4、FIFO等干扰项 -
NAME:必须完整等于你传入的路径(注意软链接会显示真实路径,若不确定可加
-L显示链接目标)
过滤出纯写操作,排除只读和元数据访问
默认输出包含 cwd、txt、mem 等非实际写入的条目。如只想看真正对文件内容做写入的句柄,加过滤:
sudo lsof -a /path/to/your/file -d ^cwd,^txt,^mem
其中 -d ^cwd,^txt,^mem 排除了当前目录、可执行体、内存映射等伪文件描述符,保留真实 I/O 句柄。
检查是否在持续写入(配合 /proc 验证)
仅靠 lsof 无法判断“是否实时写入”,但可通过文件偏移量辅助判断:
- 观察输出中 SIZE/OFF 列数值——如果该值随时间明显增大(比如几秒内从 1048576 → 2097152),说明进程正在追加写入
- 进一步验证:用
ls -l /proc/PID/fd/FD_NUM(如/proc/1234/fd/5)查看该 fd 指向的文件大小变化,或用watch -n 1 'ls -l /proc/1234/fd/5'动态监控
常见误判提醒
以下情况看似“写打开”,实则不产生磁盘写入:
- FD 为
mem类型:是 mmap 内存映射,修改不一定立即刷盘 - NAME 含
(deleted):文件已被 rm,但进程仍在往其 inode 写,此时写入仍有效,但路径已不可见 - TYPE 是
FIFO或PIPE:属于进程间通信管道,非磁盘文件


















