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