3

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

4

2 回答 2

2

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

使用内核代码,可以:
1. 获取进程的task_struct(使用find_task_by_pid)。
2. 浏览文件 - 使用task->files->counttask->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 回答