2011-08-15 73 views
1

在Unix系統中,可以通過從/ proc讀取數據來動態監視系統。我希望通過將「當前狀態」動態保存到文件中來在我的應用程序中實現這種監視。但是,我不希望IO延遲我的程序,所以最好使文件變成虛擬的,即不是存儲在磁盤中,而是存儲在內存中。有沒有辦法做到這一點?感謝提示!動態監視程序狀態

回答

3

爲什麼不使用共享內存和信號量。做一個'男人shmget'作爲一個起點。

+0

共享內存+信號量實際上會導致性能下降。 – 2011-08-15 19:32:08

+0

我原以爲一個簡單的監控應用程序可以每秒鐘檢查共享內存。應用程序可能只有一個單獨的線程,將穩步增加的數字放入共享內存中。監控應用程序只需確保它正在增加。 –

0

嘗試FUSE。它對編寫虛擬文件系統特別有用。它上面已經有很多文件系統。

0

我不知道你的具體要求,所以我只能猜測,但是在Linux下的每個文件都放在/ dev/shm裏。但這並不意味着它不在I/O中,只是I/O速度更快。如果你不想通過文件描述符或類似的方式進行I/O操作,請像其他人一樣建議並使用共享內存段,但這對每個人來說都難以閱讀。讓其他程序打開並讀取一個文件,然後調用程序中的某些函數(由內核空間中的/ proc完成)是不可能的。也許一個文件系統套接字或fifo是更符合你需要的東西(例如,當你有選擇/(e)輪詢程序時)。當你完全控制系統時,tmpfs也許對你有用。

1

作爲一種替代方案,您可以使您的應用程序成爲套接字服務器。通過這種方式,只有在被要求時(甚至不需要使用當前狀態更新內存區域),您也可以使用狀態信息進行響應,並且還可以從遠程計算機控制程序。如果狀態本身不是大量的數據,我認爲這是最靈活的解決方案。

如果你還讓你的應用程序響應一個HTTP請求(我不是指處理所有http協議的可能性,只是你想支持的請求),那麼你也可以避免寫一個客戶端,如果你想無論如何寫它可能更容易找到能夠做到這一點的圖書館和程序員。

讓它聽取端口80,你可以通過互聯網檢查你的程序通過防火牆,沒有努力:-)(好吧......假設程序本身可以從互聯網上,但即使這是一個簡單的以及向系統管理員要求的常見事項)。