public static MemcachedProcess Attach(int pid) { MemcachedProcess mcproc; Process nativeProcess; nativeProcess = Process.GetProcessById(pid); if (nativeProcess == null) { Log.Critical("Pid {0} could not be found", pid); return(null); } nativeProcess.Exited += Process_Exited; nativeProcess.EnableRaisingEvents = true; mcproc = new MemcachedProcess(); mcproc.process = nativeProcess; if (!_Processes.ContainsKey(mcproc.process.Id)) { _Processes.Add(mcproc.process.Id, mcproc); } Log.Info("Pid {0} attached successfuly as memcachedprocess", pid); return(mcproc); }
private void Process_Exited(object sender, EventArgs e) { MemcachedProcess process = sender as MemcachedProcess; string instanceName; instanceName = process.Tag as string; RemoveInstance(instanceName); }
public static MemcachedProcess FireUp(ulong memSize, ushort port) { MemcachedProcess mcproc = null; string arg; ProcessStartInfo psi = null; arg = string.Format("-p {0} -m {1}", port, memSize); psi = new ProcessStartInfo(Config.Get().MemcachedPath, arg); psi.CreateNoWindow = true; psi.UseShellExecute = false; mcproc = new MemcachedProcess(); try { mcproc.process = new Process(); mcproc.process.EnableRaisingEvents = true; mcproc.process.Exited += Process_Exited; mcproc.process.StartInfo = psi; if (!mcproc.process.Start()) { mcproc.process = null; mcproc = null; Log.Error("Process could not be started"); return(null); } } catch (Exception e) { mcproc = null; Log.Error("memcached process start error: %s", e.Message); return(null); } if (!_Processes.ContainsKey(mcproc.process.Id)) { _Processes.Add(mcproc.process.Id, mcproc); } return(mcproc); }
public bool Start() { if (!PutInstance(this, this.name)) { throw new Exception(string.Format("{0} is already registered!", this.name)); } process = MemcachedProcess.FireUp(this.memSize, this.port); if (process == null) { RemoveInstance(this.name); return(false); } process.Tag = this.name; process.Exited += Process_Exited; return(true); }
public static MemcachedInstance CreateInstanceFromExist(int pid, ushort port, string name) { MemcachedInstance inst = new MemcachedInstance(0, name, port); if (!inst.PutInstance(inst, inst.name)) { throw new Exception(string.Format("{0} is already registered!", inst.name)); } inst.process = MemcachedProcess.Attach(pid); if (inst.process == null) { inst.RemoveInstance(name); inst = null; return(null); } inst.process.Tag = name; inst.process.Exited += inst.Process_Exited; return(inst); }