当检查 Linux 下目录的“长”目录列表时/proc/<pid>/
,我注意到目录内的伪文件条目有时会具有不同的关联时间。
据我所知,其内部工作原理是,结构中不存在任何“任意”或“不可预测”的属性,所有事物都是确定性的,所有事物(包括文件时间)都必须确定某处基于某些标准;这些标准是否有用是一个重要的问题。
例如,目录本身的时间戳 ( /proc/<pid>/
) 似乎反映了相应进程的启动时间(至少是进程 ID——它不会通过调用 进行更新exec
),而各种条目(例如proc/<pid>/fd/
或 )/proc/<pid>/cwd
可能具有不同的值。我最好的猜测是,其中许多缓存了首次检索信息的时间,但很难说。
这里能获得什么有用的知识吗?
答案1
您可能知道,下面的文件/proc
是内存文件,这意味着它们不存在于硬盘上。但是,它们可以像任何其他文件一样处理。我看不出这些文件的修改时间有什么特殊含义。它们就像文件系统下的任何其他文件一样。
您可以尝试检查一个文件的时间,然后再检查touch
它。正如预期的那样,文件修改时间将会更新。
答案2
/proc
只是另一个文件系统,其中的结束条目的创建方式与任何其他文件系统一样。如果您创建一个进程,则会/proc/<pid>/
创建条目来保存进程上的数据。当此进程打开文件描述符时,则会在 中创建一个条目/proc/<pid>/fd/
。
至于有用的知识,我没有机会使用/proc/<pid>/
其中的内容,但我希望有一天我会用到。这在很大程度上取决于什么对你有用。系统管理员会发现与安全专家和数据库管理员不同的东西很有趣。不过,知道有这种数据可用还是很好的。有一天它可能会派上用场,但我不会花太多时间去学习这个问题的细节。这是因为对我个人来说,这将是糟糕的时间投资。你的里程可能会有所不同 :)。
编辑:我无法在评论中回复 tylerl 的评论,所以就放在这里。
tylerl,你说得对,但又说得错,这取决于你如何看待这个问题(想想:光的波粒二象性)。你说那procfs
不是一个“真正的”文件系统,这当然是对的。你不能在其中创建目录或文件,也不能存储数据。是的,它是一个允许访问某些内核结构的 API,它绝对不会创建任何磁盘结构。我不太确定内存结构(目录的 [cm] 时间存储在哪里/proc
?),但我承认我无知,不会争论这一点。
另一方面,当您想要探索procfs
、查看其中的内容并从其中的条目中学习时,您可以在很大程度上将其视为“另一个文件系统”。您可以读取一些“文件”,也可以将(通常是严格定义的值)写入一些“文件”。当您创建一个进程(例如,运行bash &
)时,/proc/<pid>
条目的创建日期将与进程创建时间相对应。我认为,对于“查看其中的内容”模型,一个足够好的近似值是“此条目是在进程创建时在文件系统中创建的”。当然,严格来说,这可能是一个谎言。不过,如果您不需要整个真相大白于天下,这是一个非常有用的谎言。