当文件描述符是管道的链接时,这意味着什么?

当文件描述符是管道的链接时,这意味着什么?

当我查看 时ls -la /proc/<pid>/fd,我发现 stdout 是到管道的链接:

lr-x------    1 admin    root            64 Jul  9 21:22 1 -> pipe:[1155]

这是什么意思?谁在听这管子?我怎样才能看到这个进程的标准输出?

答案1

借用自这个答案,这意味着PID为的进程的标准输出<pid>已被重定向到管道(一种先进先出在文件系统层次结构中没有表示)。1155是管道的 inode 号(在 Linux 上,您可以/proc/[pid]/fd/proc(5)手册页了解更多信息)。

一个例子:

$ cat - | less
$ pgrep cat
187873
$ ls -l /proc/187873/fd/1
l-wx------ 1 user user 64 Jul  9 22:23 /proc/187873/fd/1 -> 'pipe:[1624839]'

的标准输出cat被重定向到索引节点为 的管道的写入端1624839,而 的标准输入less被从其读取端重定向。

如果我们对连接到管道读取端的进程一无所知,我们可以搜索所有打开该管道的进程(但请注意,我们可能没有查看它们所需的权限):

$ fuser -v /proc/187873/fd/1
                     USER   PID ACCESS COMMAND
/proc/187873/fd/1:   user  187873 F.... cat
                     user  187874 f.... less

然后确认它less已打开(用于阅读):

$ ls -l /proc/187874/fd/0
lr-x------ 1 user user 64 Jul  9 22:28 /proc/187874/fd/0 -> 'pipe:[1624839]'

答案2

您可以找到管道的另一端(如果进程仍然存在)

ls -l /proc/[1-9]*/fd 2>/dev/null | grep -B 3 -F 'pipe:[1155]'

相关内容