Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何获取套接字的所有者进程?_Sockets_Linux Kernel - Fatal编程技术网

Sockets 如何获取套接字的所有者进程?

Sockets 如何获取套接字的所有者进程?,sockets,linux-kernel,Sockets,Linux Kernel,给定一个套接字结构,有没有办法在内核模块中获取该套接字的所有者进程?也就是说,给定一个套接字结构,我试图获取其所有者进程的进程描述符(task_struct struct) 我最初的想法是遍历任务列表。对于p遍历的每个进程,只需检查p的打开文件描述符是否包含一个与套接字结构关联的文件描述符相同的描述符。(在struct socket中,有一个字段struct file*file) 我不确定内核是否允许我遍历任务列表。有人知道怎么做吗?谢谢。我认为这不是个坏主意。看看我有一天写的这段代码: str

给定一个套接字结构,有没有办法在内核模块中获取该套接字的所有者进程?也就是说,给定一个套接字结构,我试图获取其所有者进程的进程描述符(task_struct struct)

我最初的想法是遍历任务列表。对于p遍历的每个进程,只需检查p的打开文件描述符是否包含一个与套接字结构关联的文件描述符相同的描述符。(在struct socket中,有一个字段struct file*file)


我不确定内核是否允许我遍历任务列表。有人知道怎么做吗?谢谢。

我认为这不是个坏主意。看看我有一天写的这段代码:

struct task\u struct*task;
结构列表头*t,*t1;
...
为每个(t,t1)列出{
#ifdef CONFIG_UIDGID_STRICT_TYPE_检查
如果((task_uid(task)).val==0)/*没有根进程,只有用户空间*/
#否则
如果((任务_uid(任务))==0)
#恩迪夫
继续;
任务=列表项(t,结构任务,任务);
/*现在您有了用户空间程序的任务结构*/
/*你想做什么就做什么*/
/*例如,找出打开的文件描述符*/
}

还有一点补充:我想您知道这段代码应该在单个内核线程中运行。没有必要在内核模块的init函数中执行它。

谢谢,这很有帮助。顺便说一句,你的模块代码运行的内核版本是什么?也许你的意思是。。。继续跑?我已经在内核版本3.2.0、3.10.2上进行了测试