解决方法
你考虑过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