我试图遍历正在编写的/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
函数吗?