Perché dovresti implementare una chiamata di sistema per questo? Non si desidera aggiungere un syscall all'API Linux esistente. Questa è l'interfaccia principale di Linux per lo userspace e nessuno tocca i syscalls eccetto gli sviluppatori del kernel che sanno quello che fanno.
Se si desidera ottenere un elenco di processi e relativi parametri e stati in tempo reale, utilizzare /proc
. Ogni directory che contiene un numero intero contiene un ID di processo esistente e contiene una serie di file dinamici utili che ps
, top
e altri usano per stampare il loro output.
Se si desidera ottenere un elenco di processi all'interno del kernel (ad esempio all'interno di un modulo), si dovrebbe sapere che i processi sono mantenute internamente come una doppia lista collegata che inizia con la init
processo (simbolo init_task
nel kernel) . È necessario utilizzare macro definite in include/linux/sched.h
per ottenere processi. Ecco un esempio:
#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);
Questo dovrebbe essere ok per raccogliere informazioni. Tuttavia, non modificare nulla lì a meno che tu non sappia davvero cosa stai facendo (il che richiederà un po 'più di lettura).
Si riferisce a 'comando top'? – alfasin
L'output è come un comando superiore, ma ho bisogno di implementare una chiamata di sistema che lo faccia. – douglasd3