我生成了一个子进程,需要知道它修改,创建或删除的文件。
我不能使用dtrace因为我不能sudo。
我无法使用FSEvents,因为它报告了系统上所有进程发生的修改,而我只对我的子进程感兴趣。
答案 0 :(得分:4)
我将探索使用DYLD_INSERT_LIBRARIES
(相当于LD_PRELOAD
的Mac OS)来为您感兴趣的libc例程或系统调用设置自己的监视例程。例如,您可以编写一个{ {1}}执行您感兴趣的跟踪的例程,然后调用真正的libc my_open()
来完成剩下的工作。您需要为要捕获的所有与文件系统相关的调用(打开,关闭,读取,写入,重命名等)执行此操作。您应该能够在之前设置open()
环境变量你生成你的子进程,而不需要是root。
在Amit Singh的“Mac OS X Internals:A Systems Approach”的第2章中,有关于此的更多信息和示例。如果您没有副本,可以阅读Google Books上的相关部分。