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

时间:2012-05-21 21:48:25

标签: io linux-kernel posix

我想知道一个进程是否使用O_DIRECT打开了任何文件,但是我只能在启动进程后检查(即strace不是一个选项)。我试着查看/ proc / $ pid / fd /以查看是否有任何有用的东西,但没有。我的目标是跟踪系统中的几百个用户中是否有任何用户打开了O_DIRECT文件。这可能吗?

2 个答案:

答案 0 :(得分:2)

我不认为它在/proc或用户空间的其他地方可见。

使用内核代码,有可能:
1.获取流程task_struct(使用find_task_by_pid) 2.浏览文件 - 使用task->files->counttask->files->fd_array。 3.寻找file->f_flags & O_DIRECT

答案 1 :(得分:2)

由于内核2.6.22,/ proc / $ pid / fdinfo / $ fd包含一个八进制的标志字段。见http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html