Mac系统无文件创建者PID概念,因PID随进程结束失效;可通过lsof查实时占用进程、ls -l看文件所有者、stat+ps追溯创建时段进程(不可靠)、fs_usage监控未来创建行为。

Mac系统中没有“文件的创建者PID”这一概念,因为文件本身不记录创建它的进程ID;PID是进程运行时的临时编号,进程结束后PID即失效,无法与静态文件持久绑定。但你可以通过其他间接方式定位当前正在访问或占用该文件的进程。
查看正在读写该文件的进程(实时)
打开终端,执行以下命令:
lsof /完整/路径/到/你的/文件.txt
注意必须提供文件的绝对路径,相对路径(如 ./file.txt)可能查不到结果。如果文件正被某个进程打开(例如被TextEdit编辑、被Python脚本读取、被Finder预览),该命令会列出COMMAND(程序名)、PID(进程ID)、USER(用户)等信息。
若提示“command not found: lsof”,说明系统环境异常——但lsof是macOS原生命令,正常情况下无需安装。
查看文件元数据中的归属信息
文件在磁盘上记录的是所属用户(Owner)和所属组(Group),不是创建它的PID。执行:
ls -l /完整/路径/到/你的/文件.txt
输出第一列类似“-rw-r--r--”,第三列即为文件所有者用户名(如 alice),第四列为组名(如 staff)。这个用户就是创建该文件时的当前登录用户,但无法反推当时创建它的那个进程编号。
如果你用 sudo touch file.txt 创建文件,所有者会是 root;如果用普通用户执行,所有者就是该用户名——这和PID无关,只和执行命令时的身份有关。
追溯文件创建时间并筛选对应时段的进程(需日志支持)
第一步:获取文件精确创建时间
stat -f "%B" /完整/路径/到/你的/文件.txt
该命令返回自1970年1月1日以来的秒数(Unix timestamp)。可转为可读时间:date -r $(stat -f "%B" /完整/路径/到/你的/文件.txt)
第二步:检查该时刻前后活跃的Java进程(举例,因Java应用常生成日志文件)
ps aux | grep -E 'java.*(-jar|Main)' | awk -v t=$(stat -f "%B" /完整/路径/到/你的/文件.txt) '$10 t-30 {print}'
⚠️ 这个方法【严重依赖系统未重启且进程列表未轮转】,实际几乎不可靠。ps 输出的STARTED时间精度低,且不记录毫秒级创建瞬间,仅作线索参考。
用fs_usage实时监控文件创建行为(仅限主动观测)
如果你尚未创建目标文件,想捕获未来某次创建动作的PID,可用:
sudo fs_usage -w -f filesys | grep -E 'open|create|write' | grep -i "你的关键词"
该命令需提前运行,然后在另一终端执行 touch /tmp/test 或启动写入文件的应用。输出中每行含PID、进程名、操作类型和路径。按 Ctrl+C 停止监控。
注意:【必须加 sudo,否则看不到系统级写入行为】;输出滚动极快,建议重定向到文件再搜索:sudo fs_usage -w -f filesys > /tmp/fslog.txt 2>&1 &

















