我有一個shell腳本,它根據進程是否正在運行來歸檔日誌文件。如果日誌文件未被進程使用,則將其歸檔。到目前爲止,我使用lsof來獲取正在使用的日誌文件,但在將來,我決定使用perl來完成這個功能。在linux中是否有類似於lsof命令的perl函數?
是否有一個類似於Linux中lsof可以執行的perl模塊?
我有一個shell腳本,它根據進程是否正在運行來歸檔日誌文件。如果日誌文件未被進程使用,則將其歸檔。到目前爲止,我使用lsof來獲取正在使用的日誌文件,但在將來,我決定使用perl來完成這個功能。在linux中是否有類似於lsof命令的perl函數?
是否有一個類似於Linux中lsof可以執行的perl模塊?
有一個perl模塊,它包裹着lsof。見Unix::Lsof。
正如我所看到的,不使用lsof
的大問題是,需要以獨立於操作系統的方式工作。使用lsof
允許perl程序員使用一致的應用程序,從而實現操作系統獨立性。
要讓perl模塊開發人員編寫lsof,實際上是將lsof作爲一個庫寫入,然後將其鏈接到perl--這比僅使用現有二進制文件的工作量要多得多。
也可以使用fuser
command,它顯示文件句柄的進程ID。還有一個尋求實現相同功能的module。從的perldoc注:
,這種工作方式是極不可能在任何其他操作系統 Linux以外的,甚至那麼它可能不超過2.2其他攜手* 內核。
一個威力嘗試行走的/ proc/*/FD和尋找在那裏的文件描述符,看看是否有任何指向有問題的文件。如果知道正在運行的進程的進程ID是否會打開日誌文件,那麼查看該進程就很容易了。請注意,這是定影模塊的工作原理。
這就是說,應該問「你爲什麼要離開lsof」?
謝謝@MichaelT,我使用的是與lsof相似的定影器。 – CBR
除Unix :: Lsof外還有其他模塊嗎?這個函數再次取決於我將在不久的將來卸載的lsof二進制文件。 – CBR
@nlrreddy:你爲什麼要卸載它?至少在我的系統中,'lsof'包的重量高達0.9兆字節。 – Daenyth
@Daenyth:我已經看到在os補丁之後lsof不起作用的問題。 – CBR