【发布时间】:2011-01-02 19:48:34
【问题描述】:
我正在制作一个应用程序,它将监视另一个进程的状态,并在它停止响应、退出或抛出错误时重新启动它。 但是,我无法可靠地检查进程(作为 C++ 控制台窗口)是否已停止响应。
我的代码如下所示:
public void monitorserver()
{
while (true)
{
server.StartInfo = new ProcessStartInfo(textbox_srcdsexe.Text, startstring);
server.Start();
log("server started");
log("Monitor started.");
while (server.Responding)
{
if (server.HasExited)
{
log("server exitted, Restarting.");
break;
}
log("server is running: " + server.Responding.ToString());
Thread.Sleep(1000);
}
log("Server stopped responding, terminating..");
try
{ server.Kill(); }
catch (Exception) { }
}
}
我正在监控的应用程序是 Valve 的 Source Dedicated Server,运行着 Garry 的 Mod,我对物理引擎施加了过大的压力来模拟它停止响应。 但是,这永远不会触发进程类将其识别为“停止响应”。
我知道有一些方法可以使用他们自己的协议直接查询源服务器,但我希望它保持简单和通用(以便将来我可以将它用于不同的应用程序)。
任何帮助表示赞赏
【问题讨论】:
-
+1 对于 SLaks,你能管理的最好的就是“它是在运行,还是已经停止?”。我会使用专有 api 来检查状态。