我在研究 Linux 的内部结构时了解到进程的文件描述符是如何保存的/proc/PID/fd
。我尝试研究 Ubuntu 18.04 安装,但遇到了一些我无法理解的事情。
我有一个 chromium-browser 进程 (pid 6949),它有一个线程 (pid 6961),我确认正在使用htop
。
下面附图显示了 3 个命令的输出。
- 不存在名为 6961 的目录/文件。
- 我有预感我可能不被允许读取该位置,因此我尝试使用 sudo,但目录不存在。
- 我将目录更改为 6961,它允许我进行更改!
ls
如果存在一个我可以访问的有效位置,我不明白为什么没有列出名为 6961 的目录cd
。
我也尝试使用标志-a
、-h
和,-l
但 ls 根本没有列出目录 /proc/6961。
我在这里遗漏了什么?
akhil@hobbes:/proc$ ls /proc | grep 6961
akhil@hobbes:/proc$ sudo ls /proc | grep 6961
akhil@hobbes:/proc$ cd /proc/6961
akhil@hobbes:/proc/6961$
答案1
此行为的解释可以在proc(5) 手册页。以下是概述部分:
/proc/pid subdirectories
...
The /proc/pid subdirectories are visible when iterating
through /proc with getdents(2) (and thus are visible when
one uses ls(1) to view the contents of /proc).
/proc/tid subdirectories
...
The /proc/tid subdirectories are not visible when
iterating through /proc with getdents(2) (and thus are not
visible when one uses ls(1) to view the contents of
/proc).
进程(线程 ID 等于其进程 ID 的线程)可通过/proc
使用来查看ls
。其他线程无法通过 使用 来查看ls
,但指定其路径后即可访问其目录。