加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux中另一个进程的重复文件描述符(不带sendmsg)

发布时间:2020-12-14 00:52:59 所属栏目:Linux 来源:网络整理
导读:我所拥有的是进程id和来自该进程的文件描述符.除了sendmsg之外还有什么办法可以复制(或重新打开)该进程的文件描述符以供 Linux中的另一个进程使用吗? Windows有DuplicateHandle用于此目的,我想知道Linux上是否有类似的东西. 解决方法 正如vonbrand指出你可
我所拥有的是进程id和来自该进程的文件描述符.除了sendmsg之外还有什么办法可以复制(或重新打开)该进程的文件描述符以供 Linux中的另一个进程使用吗?

Windows有DuplicateHandle用于此目的,我想知道Linux上是否有类似的东西.

解决方法

正如vonbrand指出你可以使用/ proc /< pid> / fd /< fd>.但你不能只是“写在那里”,它不会给任何坚固.

它是使用pid< pid>进行打开的文件的特殊符号链接.作为文件描述符< fd>.

只需使用它在您的过程中打开完全相同的文件.

您不必担心原始文件被删除或替换,因为使用此链接将始终为您提供进程打开的原始文件.只需尝试以下一小块bash代码:

#!/bin/bash
echo "test" >/tmp/file
ls -li /tmp/file
exec 3<> /tmp/file
rm /tmp/file
ls -lLi /proc/$$/fd/3
cat /proc/$$/fd/3

这将创建一个包含字符串test的文件/ tmp /文件.打开文件作为文件描述符3,删除它,删除后仍然可以使用/ proc / self / fd / 3捕获其内容.在linux中,只要任何进程仍然使用它,文件就不会被最终删除.

因此,不是获取和使用进程的文件描述符,而是打开文件描述符“指向”的文件.

当然,您需要权限/权限/权限才能这样做.如果您拥有这两个进程或者您是root用户,那么您拥有哪个.

编辑:如果不是在bash中你也可以使用/ proc / self / …而不是/ proc / $$/ …来获取有关当前进程的信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读