Ist es möglich, benachrichtigt zu werden (per Callback o.ä.), wenn ein neuer Prozess ausgeführt wird, wenn einer geschlossen wird und wenn sich der Status ändert (dh gestoppt, seitenweise usw.)? In user-land wäre es einfach, einen Verzeichnis-Listener auf/proc einzurichten.Auf neue Prozesse im Linux-Kernel-Modul warten
Antwort
Haben Sie kprobes in Betracht gezogen? Sie können kprobes verwenden, um eine Callback-Funktion auszuführen, wenn ein Kernel-Code ausgeführt wird. Z. B. könnten Sie eine do_fork
kprobe hinzufügen, um zu warnen, wenn neue Prozesse wie in this example erzeugt werden.
In ähnlicher Weise können Sie eine Sonde für do_exit()
hinzufügen, um zu erkennen, wenn Prozesse beendet werden.
Um den Status zu ändern, könnten Sie eine Rückmeldung über sched_switch()
haben und feststellen, wenn sich der Status ändert. Abhängig von Ihrer Anwendung kann dies zu viel Aufwand verursachen.
Wenn Sie nur wollen, um Daten zu sammeln, etwas Licht Verarbeitung durchführen und suchen nicht mehr viel mit dem Kernel-Modul zu tun, kann systemtap eine gute Alternative sein, eine Kernel-Modul zu schreiben: https://sourceware.org/systemtap/documentation.html
Mehr Details auf kprobes: https://www.kernel.org/doc/Documentation/kprobes.txt
sched_switch()
systemtap Beispiel: https://sourceware.org/systemtap/examples/profiling/sched_switch.stp
"In Benutzer-Land, wäre es einfach ein Verzeichnis Hörer auf/proc einzurichten" Eigentlich, nein, das geht nicht. Aber [der/proc-Konnektor tut es] (http://stackoverflow.com/questions/6075013/linux-detect-launching-of-programs). – duskwuff