我想知道一个进程是否使用O_DIRECT打开了任何文件,但是我只能在启动进程后检查(即strace不是一个选项)。我试着查看/ proc / $ pid / fd /以查看是否有任何有用的东西,但没有。我的目标是跟踪系统中的几百个用户中是否有任何用户打开了O_DIRECT文件。这可能吗?
答案 0 :(得分:2)
我不认为它在/proc
或用户空间的其他地方可见。
使用内核代码,有可能:
1.获取流程task_struct
(使用find_task_by_pid
)
2.浏览文件 - 使用task->files->count
和task->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