Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何判断哪个文件是首先创建的?_Linux_Pid_Ctime - Fatal编程技术网

Linux 如何判断哪个文件是首先创建的?

Linux 如何判断哪个文件是首先创建的?,linux,pid,ctime,Linux,Pid,Ctime,在Linux系统上(我面前的是Ubuntu 10.04,但这不重要),我怎么知道在同一秒内创建的两个文件中,哪一个是最先创建的?我所控制的过程既不创造自己;我认为,在所有其他方面,ctime都会起作用,但1秒的分辨率是个问题 在后台,我试图可靠地确定一个可能过时的pid文件是否引用了具有该pid的当前进程。如果有更好的方法,我洗耳恭听。您可以尝试ls-rt按时间对文件进行排序,希望文件头比默认的列表时间格式显示的精度更高。但是如果文件系统没有这些信息,就没有办法做到这一点 其他选择?您可以向文件

在Linux系统上(我面前的是Ubuntu 10.04,但这不重要),我怎么知道在同一秒内创建的两个文件中,哪一个是最先创建的?我所控制的过程既不创造自己;我认为,在所有其他方面,ctime都会起作用,但1秒的分辨率是个问题


在后台,我试图可靠地确定一个可能过时的pid文件是否引用了具有该pid的当前进程。如果有更好的方法,我洗耳恭听。

您可以尝试
ls-rt
按时间对文件进行排序,希望文件头比默认的列表时间格式显示的精度更高。但是如果文件系统没有这些信息,就没有办法做到这一点

其他选择?您可以向文件中添加一个ID并始终递增该ID,但一旦尝试从文件系统加载该ID(当您创建新进程时),就会遇到锁定问题


那么,如何确保PID文件不过时呢?答:使用。它在后台运行一个进程,并确保进程退出后立即删除PID文件。

实际上,在具有现代文件系统的现代Unice上,文件修改时间存储在timespec中。详情:

stat
看起来像这样:

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.

因此,在我的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

总之,我认为如果硬件提供的话,您已经获得了足够的精度。

这高度依赖于文件系统。例如,
ext3
只有一秒的分辨率(请参阅)。只要我可以比较ext3和/proc,我就可以了。如果ext3告诉您文件的ctime是
14:03:30
,而您的proc文件是
14:03:30'050
,您如何确定之前创建了哪一个?这就是问题;因此,“如果有更好的方法……”是的,问题是我正在有效地编写一个守护程序脚本。啊,重新发明轮子的纯粹幸福。我的建议是:只需编写一个普通进程,并使用daemon脚本将其转换为daemon.Hm。在这种情况下,精度在我(在Ruby VM中)和硬件之间的堆栈中的某个地方丢失了。我想我还需要进一步挖掘。检查您是否可以运行
stat(2)
系统调用。机会是(因为虚拟机),你不能。尝试JNA(与JNI不同,不需要编译器)或独立的可执行文件,您可以通过
ProcessBuilder
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