在Linux内核中,我们在网络堆栈中有一个sk_buff结构,我们从该结构中获取inode,并从该inode中获取创建该inode的进程的pid。sk_buff中有一个pid字段,但它总是被设置为0。有没有办法从内核内部知道inode的pid?
x7yiwoj41#
您可以使用以下命令从skb读取PID
skb-〉sk-〉套接字-〉文件-〉f_所有者-〉pid
对于某些较早的内核版本,可以将PID读作
skb-〉sk-〉套接字-〉文件-〉f_所有者
rsaldnfx2#
int pid = current->tgid;
当在内核中进行网络系统调用时,类似于sendto,它将携带此tgid,即调用者的pid。但它并不总是有正确的值,如果它是一个重新传输,它是不正确的,你需要一些机制来记录最早调用的tgid。祝你好运
2条答案
按热度按时间x7yiwoj41#
您可以使用以下命令从skb读取PID
skb-〉sk-〉套接字-〉文件-〉f_所有者-〉pid
对于某些较早的内核版本,可以将PID读作
skb-〉sk-〉套接字-〉文件-〉f_所有者
rsaldnfx2#
当在内核中进行网络系统调用时,类似于sendto,它将携带此tgid,即调用者的pid。
但它并不总是有正确的值,如果它是一个重新传输,它是不正确的,你需要一些机制来记录最早调用的tgid。
祝你好运