2011-08-05 60 views
1

我做存儲進程對象

Process p = null; 
     if(CheckOS.isWindows()) 
      p = rt.exec(filebase+port+"/hlds.exe +maxplayers "+players+ " -game cstrike -console +port "+port+" -nojoy -noipx -heapsize 250000 +map de_dust2 +servercfgfile server.cfg +lservercfgfile +mapcyclefile mapcycle.txt +motdfile motd.txt +logsdir logs -zone 2048",null, new File(filebase+port)) ; 

,並希望存儲p在數據庫中,但過程並不序列化,如何將它保存在數據庫中?

,我們可以檢查過程p仍在運行或死於某種崩潰或東西

+1

是什麼意思存儲在數據庫中的一個過程?流程實例與操作系統級別的誠實流程相關聯......您是否試圖在Web會話中保留對流程的引用或類似的內容?總結一下,這個用例是什麼? –

+0

實際上我會在一段時間後檢查過程是否正在運行,所以想要保存它 – livingoff

回答

1

您絕對不能將進程本身存儲在數據庫中。但是,如果你想保持周圍流程以備將來使用(VM的範圍內),那麼你可以有這樣的事情:

public class ProcessRegistry { 

    public static class Key {} 

    private static final ProcessRegistry INSTANCE = new ProcessRegistry(); 

    public static ProcessRegistry getInstance() { return INSTANCE; } 

    private final Map<Object, Process> _processes = new HashMap<...>(); 

    public Key registry(Process p) { 
    Key key = new Object(); 
    _processes.put(key, p); 
    return key; 
    } 

    public Process lookup(Key key) { 
    return _processes.get(key); 
    } 
} 

您可以存儲和查找在任何地方(你的類加載器的範圍之內)使用

ProcessRegistry.getInstance().register(...) 

0

有沒有簡單的方法的過程保存到數據庫中。相反,您可以在數據庫中保存對其的引用。如果我這樣做,我會做:

  1. 創建一個新的進程
  2. 保存過程中的一些ID
  3. 的地圖保存該ID數據庫

在尋找它你可以使用id查找進程,看它是否已經結束。

+0

好的建議謝謝:) – livingoff

+0

我還在想你可以產生一個讀取輸出的新線程,並準備好你什麼時候想要。 –