为什么不for_each_process显示每个任务?

我试图循环通过/proc实用程序中的每一个进程,我正在写(内核模块在/fs/proc )。 问题是,我只看到根名称空间中的进程。 我试图从sched.h使用macrosfor_each_process

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

注意:我想知道它是否与rcu_read_lock ? 我害怕把一个rcu_read_lock ,我不知道它应该去哪里。 麻烦的是,我所阅读的文档似乎说,在一个可抢占的内核(我的是),睡在rcu_read_lock内是非法的。 我需要调用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函数吗?

我认为for_each_process()只是给你线程组的领导者。

这遍历所有task_struct变量(在sched.h中定义)。

 struct task_struct *g, *p; do_each_thread(g, p) { //do something with p } while_each_thread(g, p); 

这个例子打印出一个很长的列表,看起来好像它可能正在打印几乎所有的人……以为我没有把它们计算在内

http://tuxthink.blogspot.in/2011/03/using-foreachprocess-in-proc-entry.html

for_each_process是一个内核层函数,实际上不是你应该如何循环unix中的进程。 更简单的东西,比如这个(python,很容易在其他语言中实现),可能是你想要的解决方案。

 #Print each process id import re,os for fn in os.listdir( '/proc' ): if re.match('\d+', fn): print 'process %s'%fn