没有更新以反映新文件吗?

ls not updating to reflect new files?

我正在 运行创建一个在特定目录中创建一堆文件的程序,我想观看文件的创建过程。

我打开两个终端 windows 并将其中一个(称为终端 A)cd 到程序目录(这样我就可以 运行 它)和另一个(终端 B)到写入输出文件的目录(此输出目录开始时为空)。当我在终端 A 的输出目录中 touch 一个文件然后在终端 B 中 ls 时,新文件出现——所有这些都正常运行。

但是,在我 运行 终端 A 中的程序之后,当我在终端 B 中执行 ls 时,新文件的 none 出现了。奇怪的是,如果我这样做 cd . 然后 ls 在终端 B 中,现在列出了新文件。

是什么导致了这种行为,我可以解决这个问题吗?

编辑:关于正在写入文件的信息。

这一系列事件似乎重现了这个问题。

您在终端 A 中的程序可能会删除终端 B 的当前目录,然后使用相同的名称重新创建它,因此 ls 无法正常工作,因为最初 cd通过终端 B 不再存在。但是,cd . 将您带到(现在)重新创建的目录,此时 ls 再次工作。

如果您的第二个目录被删除并重新创建,就会发生这种情况。 即使目录被删除,但某些进程将其作为当前目录,它的文件描述符将保持打开状态,并且 ls 将显示旧内容。 执行 cd . 将强制关闭现在不存在的目录的描述符并再次重新打开它,现在显示新内容。