我想知道一个进程是否使用 O_DIRECT 打开了任何文件,但我只能在进程启动后检查它(即 strace 不是一个选项)。我尝试查看 /proc/$pid/fd/ 以查看是否有任何有用的东西,但没有。我的目标是跟踪系统上的数百个用户中是否有任何一个使用 O_DIRECT 打开了文件。这可能吗?
问问题
1006 次
2 回答
2
我不认为它/proc
在用户空间中或其他地方可见。
使用内核代码,可以:
1. 获取进程的task_struct
(使用find_task_by_pid
)。
2. 浏览文件 - 使用task->files->count
和task->files->fd_array
。3. 寻找file->f_flags & O_DIRECT
。
于 2012-05-22T06:46:10.890 回答
2
从内核 2.6.22 开始,/proc/$pid/fdinfo/$fd 包含一个八进制的标志字段。见http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html
于 2012-05-22T14:15:41.723 回答