![文件描述符链接到进程中的套接字或管道](https://linux22.com/image/25502/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%E9%93%BE%E6%8E%A5%E5%88%B0%E8%BF%9B%E7%A8%8B%E4%B8%AD%E7%9A%84%E5%A5%97%E6%8E%A5%E5%AD%97%E6%88%96%E7%AE%A1%E9%81%93.png)
可能的重复:
/proc/PID/fd/X 链接号
我有一个关于文件描述符及其在 proc 文件系统中的链接的问题。我观察到,如果我列出 proc 中某个进程的文件描述符,ls -la /proc/1234/fd
我会得到以下输出:
lr-x------ 1 root root 64 Sep 13 07:12 0 -> /dev/null
l-wx------ 1 root root 64 Sep 13 07:12 1 -> /dev/null
l-wx------ 1 root root 64 Sep 13 07:12 2 -> /dev/null
lr-x------ 1 root root 64 Sep 13 07:12 3 -> pipe:[2744159739]
l-wx------ 1 root root 64 Sep 13 07:12 4 -> pipe:[2744159739]
lrwx------ 1 root root 64 Sep 13 07:12 5 -> socket:[2744160313]
lrwx------ 1 root root 64 Sep 13 07:12 6 -> /var/lib/log/some.log
我明白了文件描述符的含义,并且从我的示例中理解了文件描述符 0 1 2 和 6,它们与我的计算机上的物理资源相关联,而且我猜 5 连接到网络上的某些资源(因为套接字),但我不明白括号中数字的含义。是否指向资源的某些属性?另外,为什么有些链接失效了?最后,只要我已经问了一个问题:)什么是管道?
答案1
它们是否指向资源的某些属性?
是的。它们是允许您识别资源的唯一标识符。
另外,为什么有些链接失效了?
因为它们是不存在于文件系统中的链接,所以您无法以正常方式跟踪该链接。本质上,链接被滥用作为返回资源类型和唯一标识符的一种方式。
什么是管道?
顾名思义,管道是两点之间的连接,一端放入的任何东西都会从另一端流出。
答案2
尝试在此处查看如何获取有关开放管道的更多信息:
如何在 Linux 中的 proc-show-open-pipes-show-in-proc-in-linux 上获取更多信息
lsof | grep 2744159739
“通过管道”连接在一起的两个命令必须正常工作,如果其中之一不能正常工作,则管道已损坏。管道也可能被其他东西打破,这只是我首先想到的。
管道(例如,在 bash/ksh shell 中由竖线表示)允许单独的进程一起通信,将从一个命令接收到的信息传递到另一命令以进行下一步处理。例如:
ls -l | grep testfile