linux - 如何确定用户空间进程是否连接到netlink内核模块?

标签 linux kernel sockets

我目前正在编写一个小型 Linux 内核模块 (> 3.10),它应该通过 netlink 套接字与用户空间进程进行通信。 双方数据接收和发送工作正常。 但是如何在内核模块内部找出是否有任何用户空间进程连接呢?

目前我只是等待进程向模块发送数据,并保存进程pid作为答案。 但是,如果我的模块应该定期从内核向用户空间发送数据,而不需要来自用户空间进程的任何请求,该怎么办?是否可以查明是否有任何套接字打开?

我在struct proto中发现了一些有趣的回调指针,但它们似乎没有被使用(用于netlink套接字?)。

最佳答案

Kernel space <> User space通过内核的 netlink 套接字进行通信。他们有热插拔[ udev , modprob等]事件[添加、更改、删​​除等]在发生重大状态更改时触发。

如果您监听系统中的这些事件,您就可以进一步挖掘。

如果你有 udev 热插拔,你可以使用下面的命令,或者有一些旧的命令:

udevadm monitor

关于linux - 如何确定用户空间进程是否连接到netlink内核模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919997/

相关文章:

c - 仅使用程序计数器和可执行文件调查未对齐的用户空间访问

sockets - IPv6 数据包 header 操作

java - 处理许多传入数据包的最佳方法

linux - 如何在tomcat服务器中重启应用程序

c - 当我们从不同的上下文调用 msync 时,文件内容不持久

linux - 寻找一个 bash 脚本来在 linux 服务器上运行具有不同输入的程序

c - VirtualBox 如何处理 guest Linux 的中断?

kernel - 如何在虚拟化环境中启用英特尔处理器跟踪 (IPT)?

linux - 用于调试 Linux 设备驱动程序的 GDB

javascript - 在 NodeJS 中,如何与另一台可能已关闭的服务器重新建立套接字连接?