2010-04-14 129 views
2

是否有一种简单的方法来检测写入文件何时关闭?我有一个每5秒钟启动一个新文件的进程。我无法更改该过程的代码。我正在编写另一个过程,在创建时立即分析每个文件的内容。是否有一种简单的方法来查看某个目录,以查看文件何时不再打开以供写入?我希望得到某种Linux命令。检测文件已关闭

+0

什么语言?每个进程调用什么上下文? – IAbstract 2010-04-14 16:34:03

+0

为了有更多的时间来处理文件,可以考虑在内存中创建一个文件系统 - 这应该可以加快速度。 – 2010-04-14 16:36:17

+0

任何语言。我希望在bash中有所作为,但任何事情都可以做到。该进程是一个命令行实用程序,由用户直接执行并运行几个小时。 – User1 2010-04-14 16:40:42

回答

2

你可以把东西放在strace顶部来提高你的事件。

尝试:

strace ls 2>&1 | grep "close\|open" 

使用inotify的也是一个不错的主意,但可能需要更多的编码来得到你所需要的。

+0

+1听起来像个好主意。但是,管道似乎不起作用。我认为strace是在“command | grep fclose”而不是“command”上运行的。任何提示? – User1 2010-04-14 19:30:01

+0

哎呀,我更新了答案,有一个工作示例:)。 strace默认打印到stderr。 – 2010-04-15 09:16:52

+0

,似乎已经奏效。能够看到可执行文件使用哪些共享库非常酷。谢谢! – User1 2010-04-15 18:39:25

2

如果你知道有文件中表示写你完成可以很容易地观看,使用命令,如grep

也有一些特定的文本(行),可以使用fuser命令,如果文件找出来正在使用中。

2

由于您正在使用Linux作为您的平台,您可能需要查看inotify系统调用。当监视目录时,输出文件被写入,您将获得在那里创建的文件的打开/关闭事件。

如果你想把它集成到shell脚本中,请看inotifywait,它是inotify-tools的一部分。

1

如果您知道正在写入文件的进程的进程ID,您可以观看/proc/<pid>/fd/以查看它已打开哪些文件。