2014-10-07 18 views
5

È 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

+0

"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

risposta

2

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

Problemi correlati