2013-08-23 9 views

risposta

13

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).

+0

puoi fornire alcune spiegazioni su come utilizzare questo e come funziona –

+0

Bene, devi ottenere l'attività iniziale. Spesso è fatto da "corrente", che è un marco. Con questo, è possibile ottenere l'attività attualmente in esecuzione. Ritornerà con un compito. Quindi puoi iniziare a scorrere ora con esso. – Wandy

Problemi correlati