通用netlink - PID非线程唯一

时间:2012-10-24 16:17:59

标签: linux-kernel kernel netlink

我正在编写内核模块,通过通用netlink从用户空间接收消息。当我访问genl_info-> snd_pid时,在内核回调函数中,我得到了进程ID。

根据libnl文档:

  

libnl根据进程标识符生成唯一的端口号,并为其添加偏移量,允许使用多个套接字。出于向后兼容性原因,初始套接字仍将等于进程标识符。

我的用户空间应用程序使用多个线程,我需要区分它们。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用两个选项:

  1. 通过所有线程共享一个netlink套接字,但使用您自己的通用netlink协议的NLA来识别线程

  2. 在每个线程中打开自己的netlink套接字并使用以下技巧:

  3. 当前PID_MAX_LIMIT == 2 ^ 22,而pid字段的类型为uint32。因此,可以使用pid将进程'pid和一些id< = 1024打包在一起。请参阅示例:in C,(libnl)和in Python(pyroute2)。