答案 0 :(得分:1)
使用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上,通过系统完整性保护,很多进程都不会受到监控。