如何判断一个进程是否使用O_DIRECT打开文件?

3

我想知道一个进程是否使用O_DIRECT打开了任何文件,但我只能在进程启动后进行检查(即strace不是一个选项)。我尝试在/proc/$pid/fd/中查找是否有任何有用的信息,但没有。我的目标是追踪系统上的数百个用户是否已经使用O_DIRECT打开了文件。这是否可能?

2个回答

2
我认为在用户空间中无法通过 /proc 或其他方式可见。
使用内核代码,可以:
1. 获取进程的 task_struct(使用 find_task_by_pid)
2. 浏览文件 – 使用 task->files->count 和 task->files->fd_array。
3. 查找 file->f_flags & O_DIRECT。

谢谢。正如其他评论所指出的那样,有一个可以从用户空间使用的解决方案。它只在比我拥有的更新的内核中才有,因此我可能会使用这些信息或更新的内核代码来编写一个简单的模块来完成此操作。 - Ryan

2

谢谢。这个可行。不幸的是,我暂时被困在2.6.18上,所以我可能会尝试回溯这个。 - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接