È possibile ricevere una notifica (tramite richiamata o simile) quando viene eseguito un nuovo processo, quando uno viene chiuso e quando lo stato cambia (ad esempio, interrotto, impaginato, ecc.)? In user-land, sarebbe facile impostare un listener di directory su/proc.Ascolto di nuovi processi in Linux Kernel Module
risposta
Avete preso in considerazione i kprobe? Puoi usare kprobes per eseguire una funzione di callback quando viene eseguito un codice kernel. Ad esempio, è possibile aggiungere un kprobe do_fork
per avvisare quando vengono creati nuovi processi come in this example.
Analogamente, è possibile aggiungere una sonda per do_exit()
da intercettare all'uscita dei processi.
Per modificare lo stato, è possibile avere una sonda di ritorno su sched_switch()
e rilevare quando lo stato cambia. A seconda dell'applicazione, questo può aggiungere un sovraccarico.
Se solo si desidera raccogliere i dati, eseguire alcune elaborazioni di luce, e non sta cercando di fare molto di più con il modulo del kernel, systemtap può essere una buona alternativa alla scrittura di un modulo del kernel: https://sourceware.org/systemtap/documentation.html
Maggiori dettagli su Kprobes: https://www.kernel.org/doc/Documentation/kprobes.txt
sched_switch()
systemtap esempio: https://sourceware.org/systemtap/examples/profiling/sched_switch.stp
"In user-land, sarebbe facile da configurare un ascoltatore directory/proc" In realtà no, non funziona. Ma [il/proc connector fa] (http://stackoverflow.com/questions/6075013/linux-detect-launching-of-programs). – duskwuff