【发布时间】:2017-09-29 19:02:50
【问题描述】:
在 Windows 中,我使用 sysinternals 的 processpx 来检测进程是否试图访问不存在的文件。 有没有办法在 osx 上做到这一点?
【问题讨论】:
-
为什么是 Linux 标签?考虑
strace或dtruss
标签: macos osx-yosemite
在 Windows 中,我使用 sysinternals 的 processpx 来检测进程是否试图访问不存在的文件。 有没有办法在 osx 上做到这一点?
【问题讨论】:
strace 或dtruss
标签: macos osx-yosemite
您可以使用 dtrace 脚本相对轻松地做到这一点。
我们想要记录所有打开的文件名调用, 如果打开失败,并且 errno 为 ENOENT,则显示进程名、pid 和文件名。
syscall::open*:entry
{ self->path = copyinstr(arg0); }
syscall::open*:return
/ arg0 < 0 && errno == ENOENT /
{ printf("%s(%d): %s", execname, pid, self->path); }
然后sudo dtrace -s <script>。
但是,在 OSX 上,由于系统完整性保护,很多进程将不会被此监控。
【讨论】: