2011-03-10 34 views
1

什麼是最好的linux方式來存儲與進程相關的值。linux進程localstorage

我們有一個我們動態加載和卸載的庫。在運行時,該庫將創建一個大型數據結構....約1GB。當庫被卸載時,它將數據結構留在進程的內存中。當進程重新加載庫時,我們需要該庫能夠找到這個數據結構的地址。我們這樣做是因爲我們的服務器軟件更新實時發生,無法承擔創建該數據結構的時間。我們也會在更新失敗時取消更新,這樣可以讓我們快速回到以前的版本。我們沒有能力更改調用應用程序的代碼,因此它可以傳遞數據結構的地址。

pthreads有線程本地存儲。我正在尋找類似於線程本地存儲的東西,除非它是進程本地存儲。我不想在臨時目錄中創建文件,因爲我們的服務器不時會重新啓動並重新啓動....我不想處理必須清理死進程數據文件的問題。我正在查看/proc/ directory,這是理想的,因爲它在進程終止後消失,但我不確定proc_fs.h中的函數是否要從用戶應用程序調用。

謝謝!

+0

帶環境變量! – johnnycrash 2011-03-30 01:29:14

回答

2

加載庫的可執行文件不能僅僅爲你保存,並在加載庫後傳遞它?

不管怎樣,一些替代方案是:爲數據

  • 掃描/proc/self/maps - 這取決於你如何分配它。
  • 打開一個文件,dup2()它到一個「magic」fd,rm文件,然後將你的狀態數據寫入它。關閉時它會完全消失。
  • 加載一個小型庫,其唯一目的是爲您存儲此地址。 dlopen()它重新加載時,並要求它的地址。
  • 設置/讀取變量

的環境我個人會用環境變量去。

+0

exe *可能*可能會被修改來做到這一點,但那個兔子洞沒有結束...... – johnnycrash 2011-03-10 01:17:18

+0

然後去與環境。過程本地狀態。 – Erik 2011-03-10 01:18:22

+0

我正在檢查/ proc/self/maps和dup2的想法。多庫方法目前正在實施,但它有問題。 – johnnycrash 2011-03-10 01:18:25