我在做
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
是否因某些崩溃或某种原因仍在运行或死亡
答案 0 :(得分: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(...)
等
答案 1 :(得分:0)
没有简单的方法将进程保存到数据库。相反,您可以在数据库中保存对它的引用。如果我这样做,我会这样做:
查找时,您可以使用id查找进程以查看它是否已结束。