我正在修改/procLinux中的文件系统,然后遇到/proc/self,它是指向当前进程的进程目录的符号链接。我想知道它是如何实现的。一种解决方案是更改每个上下文切换上的符号链接,但这显然非常昂贵,因为它涉及磁盘访问。
我正在修改/procLinux中的文件系统,然后遇到/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填充缓冲区。