访问/ proc时会触发哪个内核函数?

时间:2015-10-24 10:22:43

标签: linux linux-kernel

哪个函数负责/ proc创建的主要逻辑?

我必须实现这个问题中提到的行为。 Is /proc directory generated dynamically per request?

我想有一个循环任务列表并创建相应条目的函数。我正在寻找类似的东西。

我查找了使用create_proc_entry()函数的函数,但我找不到突出的东西。

2 个答案:

答案 0 :(得分:3)

  

我想有一个循环任务列表并创建相应条目的函数。我正在寻找类似的东西。

proc_pid_readdir()中的

fs/proc/base.c功能正是如此。

for循环创建所有/proc/PID个条目。 iter.task是当前的task_struct指针

int proc_pid_readdir(struct file *file, struct dir_context *ctx)
{
    /*
     .
     .
     .
      */
    for (iter = next_tgid(ns, iter);
         iter.task;
         iter.tgid += 1, iter = next_tgid(ns, iter)) {
        char name[PROC_NUMBUF];
        int len;

        if (!has_pid_permissions(ns, iter.task, 2))
            continue;

        len = snprintf(name, sizeof(name), "%d", iter.tgid);
        ctx->pos = iter.tgid + TGID_OFFSET;
        if (!proc_fill_cache(file, ctx, name, len,
                     proc_pid_instantiate, iter.task, NULL)) {
            put_task_struct(iter.task);
            return 0;
        }
    }
    ctx->pos = PID_MAX_LIMIT + TGID_OFFSET;
    return 0;
}

答案 1 :(得分:2)

实际上每个模块都自己处理它的proc文件。使用Linux的源代码,您可以查看proc中的各个文件名。这样你就可以找到感兴趣的函数的位置。