2014-10-07 38 views
5

是否有可能在执行新进程,何时关闭以及状态更改(即停止,分页等)时得到通知(通过回调或类似方式)?在user-land中,在/ proc上设置一个目录监听器很容易。在Linux内核模块中侦听新进程

+0

“在用户的土地,这将是很容易设置上的/ proc目录监听器”其实,不,那不行。但[/ proc连接器呢](http://stackoverflow.com/questions/6075013/linux-detect-launching-of-programs)。 – duskwuff 2014-10-08 16:01:20

回答

2

您是否考虑过kprobes?执行某些内核代码时,可以使用kprobes执行回调函数。例如,您可以添加一个do_fork kprobe,以便在创建新进程时发出警报,如this example中所示。

同样,您可以添加do_exit()的探测器以在进程退出时捕获。

若要更改状态,您可以在sched_switch()上有返回探针,并在状态更改时捕获。根据您的应用程序,这可能会增加太多的开销。

如果你只是想收集数据,进行一些轻的处理,并没有寻找到与内核模块的功能远不止如此,SystemTap的可能是一个很好的替代编写内核模块:https://sourceware.org/systemtap/documentation.html

更多细节在Kprobes的: https://www.kernel.org/doc/Documentation/kprobes.txt

sched_switch() SystemTap的例子: https://sourceware.org/systemtap/examples/profiling/sched_switch.stp