我目前正在编写一个小型 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/