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).
Beziehen Sie sich auf 'top' Befehl? – alfasin
Die Ausgabe ist wie ein Top-Befehl, aber ich brauche einen Systemaufruf, der das tun. – douglasd3