Проверка того, что консольное приложение все еще выполняется с использованием класса Process - PullRequest
2 голосов
/ 02 января 2011

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

Я знаю, что есть способы напрямую запрашивать исходный сервер, используя их собственный протокол, но я хотел бы сделать его простым и универсальным (чтобы в будущем я мог использовать его для различных приложений).

Любая помощь приветствуется

1 Ответ

3 голосов
/ 02 января 2011

Свойство Responding указывает, выполняет ли процесс цикл сообщений Windows , который не зависает.
Как указано в документации ,

Если у процесса нет MainWindowHandle, это свойство возвращает true.

Невозможно проверить, выполняет ли произвольный процесс произвольную вещь, так как выПытаешься.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...