linux - 在 Linux 内核模块中监听新进程

标签 linux process kernel-module

是否有可能在执行新进程、关闭进程以及状态更改(即停止、分页等)时(通过回调或类似方式)收到通知?在用户空间中,很容易在/proc 上设置目录监听器。

最佳答案

您是否考虑过 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() 系统抽头示例: https://sourceware.org/systemtap/examples/profiling/sched_switch.stp

关于linux - 在 Linux 内核模块中监听新进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26243638/

相关文章:

linux - 按书名/作者搜索书籍

c++ - 是否可以使用c++获取与WinCE中指定进程关联的所有Dll的内存使用情况?

c - 为多功能 i2c 设备编写内核模块 - 一个还是多个?

linux - Shell:bash 3.2.57 到 4.3.41 在 read -t 选项中的区别?

php - 运行 Composer 更新时出现内存错误

c# - Process.Start ("IEXPLORE.EXE") 在启动后立即触发 Exited 事件。为什么?

linux - 如何在 Gentoo Linux 中自动加载内核模块?

linux - printk导致内核模块出错

java - avahi 无法找到由 JmDNS 创建的服务

java - 在Java中将线程更改为进程