2012-06-19 121 views
3

我有一個shell腳本,它根據進程是否正在運行來歸檔日誌文件。如果日誌文件未被進程使用,則將其歸檔。到目前爲止,我使用lsof來獲取正在使用的日誌文件,但在將來,我決定使用perl來完成這個功能。在linux中是否有類似於lsof命令的perl函數?

是否有一個類似於Linux中lsof可以執行的perl模塊?

回答

4

有一個perl模塊,它包裹着lsof。見Unix::Lsof

+0

除Unix :: Lsof外還有其他模塊嗎?這個函數再次取決於我將在不久的將來卸載的lsof二進制文件。 – CBR

+0

@nlrreddy:你爲什麼要卸載它?至少在我的系統中,'lsof'包的重量高達0.9兆字節。 – Daenyth

+0

@Daenyth:我已經看到在os補丁之後lsof不起作用的問題。 – CBR

2

正如我所看到的,不使用lsof的大問題是,需要以獨立於操作系統的方式工作。使用lsof允許perl程序員使用一致的應用程序,從而實現操作系統獨立性。

要讓perl模塊開發人員編寫lsof,實際上是將lsof作爲一個庫寫入,然後將其鏈接到perl--這比僅使用現有二進制文件的工作量要多得多。

也可以使用fuser command,它顯示文件句柄的進程ID。還有一個尋求實現相同功能的module。從的perldoc注:

,這種工作方式是極不可能在任何其他操作系統 Linux以外的,甚至那麼它可能不超過2.2其他攜手* 內核。

一個威力嘗試行走的/ proc/*/FD和尋找在那裏的文件描述符,看看是否有任何指向有問題的文件。如果知道正在運行的進程的進程ID是否會打開日誌文件,那麼查看該進程就很容易了。請注意,這是定影模塊的工作原理。

這就是說,應該問「你爲什麼要離開lsof」?

+0

謝謝@MichaelT,我使用的是與lsof相似的定影器。 – CBR

相關問題