PIDFD_GETFD - Linux手册页
Linux程序员手册 第2部分
更新日期: 2020-03-31
名称
pidfd_getfd-获得另一个进程的文件描述符的副本
语法
int pidfd_getfd(int pidfd, int targetfd, unsigned int flags);
说明
pidfd_getfd()系统调用在调用过程中分配一个新的文件描述符。在PID文件描述符pidfd引用的过程中,此新文件描述符是现有文件描述符targetfd的副本。
在pidfd引用的过程中,重复文件描述符引用与原始文件描述符相同的打开文件描述(请参阅open(2))。因此,这两个文件描述符共享文件状态标志和文件偏移量。此外,对底层文件对象的操作(例如,使用bind(2)将地址分配给套接字对象)可以同样地通过重复文件描述符执行。
在pidfd_getfd()返回的文件描述符上设置了close-on-exec标志(FD_CLOEXEC;参见fcntl(2))。
flags参数保留供将来使用。当前,必须将其指定为0。
复制另一个进程的文件描述符的权限由ptrace访问模式PTRACE_MODE_ATTACH_REALCREDS检查控制(请参阅ptrace(2))。
返回值
成功后,pidfd_getfd()返回文件描述符(非负整数)。发生错误时,将返回-1并将errno设置为指示错误原因。
错误说明
版本
pidfd_getfd()首次出现在Linux 5.6中。
遵循规范
pidfd_getfd()是Linux特定的。
备注
当前,此系统调用没有glibc包装器。使用syscall(2)调用它。
有关PID文件描述符的描述,请参见pidfd_open(2)。
pidfd_getfd()的作用类似于unix(7)中描述的SCM_RIGHTS消息的使用,但在以下方面有所不同:
- *
- 为了使用SCM_RIGHTS消息传递文件描述符,两个进程必须首先建立UNIX域套接字连接。
- *
- 使用SCM_RIGHTS需要在复制文件描述符的过程中进行合作。相比之下,使用pidfd_getfd()时不需要这种合作。
- *
- 使用pidfd_getfd()的能力受到PTRACE_MODE_ATTACH_REALCREDS ptrace访问模式检查的限制。
另外参见
clone3(2),dup(2),kcmp(2),pidfd_open(2)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。