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 wirdfs/exec.c
. Natürlich müssen Sie die RCU-lese-Sperre oder Prozesse können verschwinden katastrophal, während das Durchlaufen der Liste.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sollte Ihnen zeigen, all die Prozesse. Ich habe code geschrieben, wie dieses.
Dies ist den Druck aller Prozesse. Ich vermute, Ihr
proc_read
Funktion. Können Sie fügen Sie Ihreproc_read
Funktion hier?Ich denke
for_each_process()
nur gibt man der thread group leader".Diese iteriert über alle
task_struct
Variablen (definiert in sched.h).Diesem Beispiel druckt eine lange Liste, sieht aus wie es sein könnte, drucken Sie fast alle....dachte, ich habe nicht gezählt, Sie
http://tuxthink.blogspot.in/2011/03/using-foreachprocess-in-proc-entry.html
for_each_process
ist ein kernel-layer-Funktion, und es ist wirklich nicht so, wie Sie sollen, um eine Schleife über Prozesse in unix. Etwas viel einfacheres, wie diese (python, leicht implementiert, die in anderen Sprachen), könnte die Lösung sein, die Sie wollen.cat /proc/list_of_procs
. Also brauche ich eine kernel-Schicht-Funktion.