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
,我需要获取它使用的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权限,是否也不允许从另一个进程执行此操作
我做错了什么?每个进程都有文件描述符。它们不在进程之间共享 如果要访问另一个进程所拥有的文件描述符,有时可以
open()
访问/proc//fd
中的路径以获取其副本。但是,这仅适用于普通文件;它在套接字上不起作用。()
因此,简而言之,没有。我所知道的没有一个进程直接从另一个进程“接管”套接字的方法,没有该进程的合作。似乎可以“接管”作为根的套接字,看:
谢谢您的评论。例如,您的意思是:
fd=open(“/proc/1442/fd/7”,O_RDONLY)
其中fd将是真正的套接字描述符?