Подождите, пока процесс не будет запущен ИЛИ до истечения времени ожидания, в зависимости от того, что произойдет раньше
Я хочу убить процесс, выполняющийся на машине, используя 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