在 Linux 系统上(我面前的是 Ubuntu 10.04,但这不重要),我如何知道在同一秒内创建的两个文件中的哪一个是最先创建的?我控制的过程既不会创造自己,也不会创造自己。在所有其他方面,我认为 ctime 可以解决问题,但 1 秒的分辨率是个问题。
对于背景,我试图可靠地确定一个可能过时的 pidfile 是否指的是具有该 pid 的当前进程。如果有更好的方法来做到这一点,我会全力以赴。
您可以尝试ls -rt
按时间对文件进行排序,希望文件头比默认的列表时间格式显示的精度更高。但是如果文件系统没有这些信息,就没有办法做到这一点。
其他选择?您可以向文件添加一个 ID 并始终递增它,但是一旦您尝试从文件系统加载此 ID(当您创建新进程时),您就会遇到锁定问题。
那么如何确保 PID 文件不是陈旧的呢?答:使用daemon
脚本。它在后台运行一个进程,并确保 PID 文件在进程退出后立即被删除。
实际上,在具有现代文件系统的现代 Unices 上,文件修改时间存储在 timespec 中。细节:
标准说stat
看起来像这样 WRT 时间:
struct timespec st_atim Last data access timestamp.
struct timespec st_mtim Last data modification timestamp.
struct timespec st_ctim Last file status change timestamp.
还有一个timespec
time_t tv_sec seconds
long tv_nsec nanoseconds
所以,在我的 Linux 2.6.39 上做一个统计:
Access: 2011-07-14 15:38:20.016666721 +0300
Modify: 2011-06-10 03:06:12.000000000 +0300
Change: 2011-06-17 11:01:35.416667110 +0300
总之,如果硬件提供它,我认为你在那里有足够的精度。