Purpose of /proc/thread-self?



我对Linux操作系统编程世界相当陌生。我正在做一个控制英特尔CPU(睿频加速,超线程,最小和最大缩放频率以解决其他用户问题(的项目。在调查 CPU 利用率/proc/stat时,我偶然发现了这个:

$ ll /proc/thread-self
lrwxrwxrwx 1 root root 0 Aug 22 04:26 /proc/thread-self -> 9389/task/9389/
$ ll /proc/self
lrwxrwxrwx 1 root root 0 Aug 22 04:26 /proc/self -> 29420/
$ ll /proc/self
lrwxrwxrwx 1 root root 0 Aug 22 04:26 /proc/self -> 29636/
$ ll /proc/thread-self
lrwxrwxrwx 1 root root 0 Aug 22 04:26 /proc/thread-self -> 30021/task/30021/

每次列出带有ll的符号链接时,thread-selfself都会不断变化。但是,日期和时间仍为上次启动时间。

我做了一些挖掘,在 2014 年发现了这个电子邮件链:

此修补程序集实现了/proc/thread-self魔术符号链接,用于解决 几个问题。

....电子邮件的下方说:

proc: Have net show up under /proc/<tgid>/task/<tid>
proc: Implement /proc/thread-self to point at the directory of the current thread
proc: Point /proc/net at /proc/thread-self/net instead of /proc/self/net
proc: Point /proc/mounts at /proc/thread-self/mounts instead of /proc/self/mounts

dp符号链接如何工作?或者我们如何使用它们来有意义地分析/显示 Linux 正在做什么?还是它们只是毫无意义,被忽略为"绒毛"?

/proc/self是指向当前进程的符号链接,即示例中ls进程。由于每个ll都会生成一个具有不同 PID 的新ls进程,因此符号链接每次都会更改。它是一个神奇的符号链接,会根据访问它的进程而变化。不同的进程将看到不同的目的地。

/proc/thread-self是一回事,只是它指向当前线程而不是当前进程。在您显示的输出中,ls正在其主(也可能是唯一(线程上查找符号链接,因此线程 ID 与进程 ID 匹配。

如果你检查mountcat /proc/mounts的输出,你会看到这个"魔术"是如何实现的。/proc通常作为虚拟文件系统挂载。

$ mount | grep proc
proc on /proc type proc (rw)

每当您访问/proc下的条目时,proc文件系统都会处理查找。与ext4xfstmpfs等标准文件系统相比,磁盘上没有底层文件集。相反,有一个内核级驱动程序来处理所有文件系统调用。当您访问/proc/self内核驱动程序会检查发出请求的进程,并动态地创建指向该进程 PID 的符号链接。

它有什么用?好吧,/proc/<PID>下有很多信息.例如,您可以在/proc/<PID>/fd/*中查看进程打开了哪些文件描述符。/proc/<PID>/cmdline给出了argv的内容。/proc/<PID>/status有一堆信息,包括 uid、gid 和内存使用情况。例如,您可以在调试文件描述符泄漏时插入对ls -l /proc/self/fd/的调用。

最新更新