我手头有一个进程id和该进程的文件描述符。除了sendmsg之外,Linux是否有其他方式可以复制(或重新打开)该进程的文件描述符以供另一个进程使用?
Windows有DuplicateHandle用于此目的,我想知道Linux上是否有类似的功能。
/proc/<pid>/fd/<fd>
即可。 但是您不能仅仅在那里“写”,并且它不会提供任何的火花。<fd>
打开的文件的特殊符号链接,该进程具有pid <pid>
。#!/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
/tmp/file
,其中包含字符串test。该文件作为文件描述符3打开,并在删除后仍然可以使用/proc/self/fd/3
查看其内容。在Linux中,只要有任何进程仍在使用文件,该文件就不会被最终删除。
因此,不必获取和使用进程的文件描述符,只需打开该文件即可。
当然,您需要拥有权限才能这样做,如果您拥有两个进程或者您是根用户,则具备相应的权限/许可/特权。
编辑:如果不在bash中,您还可以使用/proc/self/...
而不是/proc/$$/...
来获取有关当前进程的信息。
/proc/43512/fd/5
。我从未过多地涉足这些领域(除了偷看),因此在那里写作可能效果良好,也可能会出现壮观的烟火。
sendmsg
方法。难道另一个进程不能自己打开相同的文件,而不是试图从第一个进程获取描述符吗? - Some programmer dude