2013-08-23 6 views

Antwort

13

Warum würden Sie implementieren einen Systemaufruf dafür? Sie möchten der vorhandenen Linux-API keinen Syscall hinzufügen. Dies ist die primäre Linux-Schnittstelle zu Benutzerbereich und niemand berührt Syscalls außer Top-Kernel-Entwickler, die wissen, was sie tun.

Wenn Sie eine Liste der Prozesse und ihrer Parameter und Echtzeitstatus erhalten möchten, verwenden Sie /proc. Jedes Verzeichnis, das darin eine Ganzzahl ist, ist eine bestehende Prozess-ID und enthält eine Reihe nützlicher dynamischer Dateien, die ps, top und andere verwenden, um ihre Ausgabe zu drucken.

Wenn Sie eine Liste der Prozesse innerhalb des Kernels (innerhalb eines Moduls zB) erhalten möchten, sollten Sie wissen, dass die Prozesse intern als doppelt verknüpften Liste gehalten werden, die mit dem init Prozess beginnt (Symbol init_task im Kernel) . Sie sollten Makros verwenden, die in include/linux/sched.h definiert sind, um Prozesse abzurufen. Hier ein Beispiel:

#include <linux/module.h> 
#include <linux/printk.h> 
#include <linux/sched.h> 

static int __init ex_init(void) 
{ 
    struct task_struct *task; 

    for_each_process(task) 
     pr_info("%s [%d]\n", task->comm, task->pid); 

    return 0; 
} 

static void __exit ex_fini(void) 
{ 
} 

module_init(ex_init); 
module_exit(ex_fini); 

Dies sollte in Ordnung sein, um Informationen zu sammeln. Ändern Sie jedoch nichts darin, es sei denn, Sie wissen wirklich, was Sie tun (was ein wenig mehr Lesen erfordert).

+0

können Sie erklären, wie Sie dies verwenden und wie es funktioniert –

+0

Nun, Sie müssen die Startaufgabe zu bekommen. Es wird oft von "aktuell" gemacht, das ist ein Marco. Damit können Sie die aktuell laufende Aufgabe abrufen. Es wird mit einer Aufgabe zurückkehren. Dann können Sie jetzt damit beginnen, zu iterieren. – Wandy