我想跟踪特定文件的写入内容,因此我已经知道我可以这样做:
我在do_sys_open
上创建了一个探针,如果filename
参数符合我寻找的模式我使用触发器来启用一个返回探测器来获取返回的文件描述符id(&& #39; s $retval
)。这个返回探针会在common_pid
上有一个过滤器,因为我只对fd
调用返回的do_sys_open
感兴趣,这些调用刚刚打开了我想要的filename
监控。
返回探针采用fd
并在sys_write
上启用另一个探针,并在common_pid
和fd
上启用过滤器。
我希望通过这种方式,我只能跟踪我监控的一个文件上的write
次操作。
问题在于,这不适用于多线程进程。如果一个进程同时调用open
两次(使用两个线程),则上述机制可能会失败。现在,我试图找出一种方法在do_sys_open
的条目与do_sys_open
上的返回探测之间建立关联,我会对任何建议感到高兴。
PS:我不确定该问题是否属于stackoverflow或unix& Linux操作系统。
答案 0 :(得分:0)
你的做法是错误的。
首先,每个进程都有文件描述符编号,因此您几乎可以自动捕获任何使用这样的fd编号的人,这可能会也可能不会写入您感兴趣的文件。
此外,堆栈中的sys_write太高,无法捕获所有合法的编写者。
通常,您会查找您感兴趣的文件的inode,并根据相应的写入函数进行过滤。
然而,"监控写入文件"仍然有些含糊不清,因为不清楚如果有人要取消原始名称的链接并创建一个具有该名称的新文件,您会想要发生什么。如果你想处理,你确实最好在开放的地方捕捉线程,看看查找了什么inode并将它们添加到你的原语中,以便你知道监视它。
无论如何,基于fd的监控从根本上被打破了。