文件描述符链接到进程中的套接字或管道

文件描述符链接到进程中的套接字或管道

可能的重复:
/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

相关内容