我试图遍历正在编写的/proc实用程序(/fs/proc中的内核模块)中的每个进程。问题是,我只在根 namespace 中看到进程。我正在尝试使用for_each_process()中的宏sched.h

我可以在 shell 中键入ps并查看大量进程,但for_each_process()循环看不到它们。是什么赋予了?

注意:我想知道是否与rcu_read_lock()有关?我怕放一个rcu_read_lock(),我不知道应该去哪里。麻烦的是,我读过的documentation似乎说在抢占式内核(我的是)中,在rcu_read_lock()内部 hibernate 是非法的。我需要打电话给down_read(mmap_sem),我怕它会睡觉。因此,这意味着我不能使用rcu_read_lock()

最佳答案

它应该向您显示所有过程。我已经写了这样的代码。

struct task_struct *task;

for_each_process(p) {
    printk("Task %s (pid = %d)\n",p->comm, task_pid_nr(p));
}

这正在打印所有过程。我怀疑您的proc_read函数。您可以在此处粘贴proc_read函数吗?

07-24 09:46
查看更多