来自/ proc / $ PID / fd的socket fd似乎无效

时间:2018-01-23 21:26:23

标签: linux sockets linux-kernel

我知道该进程的pid,我需要获取它使用的套接字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权限从另一个进程执行此操作?

我做错了什么?

2 个答案:

答案 0 :(得分:1)

文件描述符是按进程的。它们不在进程之间共享。

如果要访问其他进程拥有的文件描述符,有时可以open() /proc/<pid>/fd中的路径获取其副本。但是,这仅适用于普通文件;它不适用于套接字。 (This question addresses the internal details.

所以,简而言之,没有。我没有直截了当的方式来了解一个过程来接管&#34;来自另一个进程的套接字,没有该进程的合作。

答案 1 :(得分:0)

看来你可以“接管”作为root的套接字,看看:

enter image description here