2010-04-14 131 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/以查看它已打開哪些文件。