Подождите, пока процесс не будет запущен ИЛИ до истечения времени ожидания, в зависимости от того, что произойдет раньше

Я хочу убить процесс, выполняющийся на машине, используя taskkill, если они все еще работают через X секунд (служба Windows была остановлена, но для устранения процессов требуется время) Какой самый правильный способ выполнить описанное выше в С# (.net 2.0 или, возможно, 3.0)?

У меня есть метод утилиты для проверки того, продолжает ли процесс работать, учитывая имя процесса (используя Process.GetProcesses()). (Поскольку этот процесс не генерируется моим кодом, я не могу использовать WaitTillExit, чтобы узнать, когда он больше не работает)

PS: процесс выполняется на удаленном компьютере

Ответы

Ответ 1

Фактически вы можете использовать Process.WaitForExit().

Просто подождите, пока процесс начнется через

Process p = Process.GetProcessById(iYourID);

И затем вызовите

if(!p.WaitForExit(iYourInterval))
{ 
    p.Kill();
}

Вы также можете получать процессы через свое имя

Process.GetProcessesByName(strYourProcessName);

Ответ 2

Вы можете вызвать Process.WaitForExit, передав соответствующий тайм-аут. Таким образом, вам не нужно будет использовать свою собственную проверку, чтобы убедиться, что процесс все еще запущен.

Ответ 3

Process p = ...

bool exited = p.WaitForExit(10000); // 10 seconds timeout