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
Linux 来自/proc/$PID/fd的套接字fd似乎无效_Linux_Sockets_Linux Kernel - Fatal编程技术网

Linux 来自/proc/$PID/fd的套接字fd似乎无效

Linux 来自/proc/$PID/fd的套接字fd似乎无效,linux,sockets,linux-kernel,Linux,Sockets,Linux Kernel,我知道进程的pid,我需要获取它使用的socketfd,因此我在/proc/$pid/fd中查找它,例如: $ ls -la /proc/1442/fd | grep socket lrwx------ 1 root root 64 Jan 23 16:22 7 -> socket:[21807] $ 现在,当我将表示套接字描述符的值7传递给getsockopt()时,我得到了EBADF错误。即使具有root权限,是否也不允许从另一个进程执行此操作 我做错了什么?每个进程都有文件描述符。

我知道进程的
pid
,我需要获取它使用的socket
fd
,因此我在
/proc/$pid/fd
中查找它,例如:

$ ls -la /proc/1442/fd | grep socket
lrwx------ 1 root root 64 Jan 23 16:22 7 -> socket:[21807]
$
现在,当我将表示套接字描述符的值7传递给
getsockopt()
时,我得到了
EBADF
错误。即使具有root权限,是否也不允许从另一个进程执行此操作


我做错了什么?

每个进程都有文件描述符。它们不在进程之间共享

如果要访问另一个进程所拥有的文件描述符,有时可以
open()
访问
/proc//fd
中的路径以获取其副本。但是,这仅适用于普通文件;它在套接字上不起作用。()

因此,简而言之,没有。我所知道的没有一个进程直接从另一个进程“接管”套接字的方法,没有该进程的合作。

似乎可以“接管”作为根的套接字,看:


谢谢您的评论。例如,您的意思是:
fd=open(“/proc/1442/fd/7”,O_RDONLY)
其中fd将是真正的套接字描述符?