Linux kernel 通用netlink-PID不是线程唯一的

Linux kernel 通用netlink-PID不是线程唯一的,linux-kernel,kernel,netlink,Linux Kernel,Kernel,Netlink,我正在编写内核模块,它通过通用netlink从用户空间接收消息。当我访问genl_info->snd_pid时,在内核回调函数中,我得到进程ID 根据libnl文件: libnl基于进程标识符生成唯一的端口号,并向其添加一个偏移量,以允许使用多个套接字。出于向后兼容的原因,初始套接字仍将等于进程标识符 我的用户空间应用程序使用多个线程,我需要区分它们。谢谢您的帮助。您可以使用两个选项: 通过所有线程共享一个netlink套接字,但使用您自己的通用netlink协议的NLA来标识线程 在每个线程中

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

根据libnl文件:

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


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

您可以使用两个选项:

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

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

  • 当前
    PID\u MAX\u LIMIT
    ==2^22,而
    PID
    字段的类型为
    uint32
    。因此可以使用
    pid
    将进程的pid和一些id打包在一起