Warum nicht for_each_process zeigen jede Aufgabe?

Ich versuche, eine Schleife durch jeden Prozess in einem /proc utility Schreibe ich (ein kernel-Modul in /fs/proc). Das problem ist, ich bin nur zu sehen, die Prozesse in der root-namespace. Ich versuche, das makro for_each_process aus sched.h.

Kann ich geben ps in eine Schale und sehen jede Menge Prozesse, aber meine for_each_process Schleife nicht. Was gibt?

Hinweis: ich Frage mich, ob es hat etwas zu tun mit rcu_read_lock? Ich fürchte, um ein rcu_read_lock und ich weiß nicht, wo es hin soll. Das Problem ist, das Dokumentation ich gelesen habe scheint zu sagen, dass in einem preemptible kernel (bei mir ist), ist es illegal, zu schlafen innerhalb von rcu_read_lock. Muss ich anrufen down_read(mmap_sem) denen fürchte ich mich schlafen. Das bedeutet also, dass ich nicht verwenden können rcu_read_lock?

  • Mein Gefühl ist, dass dies eine Erlaubnis Ding ? was passiert, wenn Sie führen Sie das Dienstprogramm mit su/sudo ? Ich nehme es, dass dies ein C-Programm ?
  • Scheint, dass auch dieses Beispiel zeigt ähnliche Ergebnisse: tuxthink.blogspot.com/2011/03/...
  • Ignorieren meine erste, nicht erkennen, das war ein kernel-Modul.
  • Nur wickeln Sie es: rcu_read_lock(); for_each_process(p) { ... }; rcu_read_unlock();, wie es gemacht wird fs/exec.c. Natürlich müssen Sie die RCU-lese-Sperre oder Prozesse können verschwinden katastrophal, während das Durchlaufen der Liste.
Schreibe einen Kommentar