为什么不重定向输出会修改目标文件的上次修改时间字段?

时间:2011-12-01 14:53:03

标签: cygwin dos

我在Cygwin中运行了一个bash脚本,其输出已被重定向到另一个文件。如果我将bash脚本作为批处理作业运行,MS-DOS会表现出同样的行为。

bash.exe &> log.txt

我知道bash.exe会定期转储输出,所以我只想监视log.txt的上次修改时间,以确定bash.exe是否已挂起。

不幸的是,通过重定向向log.txt添加内容不会更改log.txt的上次修改时间。

# ls -la --full-time log.txt
-r-xr-x---+ 1 user Domain Users 66455 2011-11-30 16:16:45.246664800 -0500 log.txt

一段时间后......

# ls -la --full-time log.txt
-r-xr-x---+ 1 user Domain Users 66838 2011-11-30 16:16:45.246664800 -0500 log.txt

请注意,即使log.txt变大,上次修改时间也没有改变。仅当bash.exe终止时,才会更新上次修改时间。

Ubuntu 11.04正确地处理了这种情况IMO。

Cygwin:CYGWIN_NT-6.1
MS-DOS:Microsoft Windows [版本6.1.7601]

1 个答案:

答案 0 :(得分:0)

我只是使用Cygwin来复制这个,所以我没有准确地提出这个问题。我的过程是在Java进程中调用Runtime.getRuntime.exec(),打开cygwin / bin / bash.exe然后从bash中运行重定向命令。在同一个调用exec()的Java进程中,我正在尝试根据之前调用的bash.exe中的内容监视上次修改时间。

我已经切换到检查文件长度而不是确定进程是否已挂起,这是有效的。我想这是一种范围问题。