Я создаю приложение, которое будет отслеживать состояние другого процесса и перезапускать его, когда он перестает отвечать, завершается или выдает ошибку.
Однако у меня возникают проблемы с тем, чтобы он надежно проверял, не перестал ли процесс (быть окном консоли 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) { }
}
}
Приложение, за которым я слежу, - это Source выделенный сервер Valve, на котором работает мод Гарри, и я слишком сильно напрягаю физический движок, чтобы симулировать его прекращение реакции.
Однако это никогда не приводит к тому, что класс процесса распознает его как «перестал отвечать».
Я знаю, что есть способы напрямую запрашивать исходный сервер, используя их собственный протокол, но я хотел бы сделать его простым и универсальным (чтобы в будущем я мог использовать его для различных приложений).
Любая помощь приветствуется