我正在修改/proc
Linux中的文件系统,然后遇到/proc/self
,它是指向当前进程的进程目录的符号链接。我想知道它是如何实现的。一种解决方案是更改每个上下文切换上的符号链接,但这显然非常昂贵,因为它涉及磁盘访问。
我正在修改/proc
Linux中的文件系统,然后遇到/proc/self
,它是指向当前进程的进程目录的符号链接。我想知道它是如何实现的。一种解决方案是更改每个上下文切换上的符号链接,但这显然非常昂贵,因为它涉及磁盘访问。
Answers:
http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482是当前的实现。
该proc
文件系统完全是虚拟的,并且已实现,因此内部VFS可以readlink
将其委托给正确的位置以进行特殊的符号链接。因此,它计算self
读取/遍历时指向的内容,而不是每个上下文切换。
其中的文件/proc
未存储在磁盘上,而是由内核动态生成的。请参阅当我打开/ proc并从中读取内容时会发生什么?
如果你编程倾斜,您可以阅读的实现/proc
在内核源代码。/proc/self
符号链接的内容由一个函数生成,该函数用调用进程的pid填充缓冲区。