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

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

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

PS: процесс запускается на удаленной машине

Ответы [ 3 ]

40 голосов
/ 19 августа 2010

На самом деле, вы можете использовать Process.WaitForExit ().

Просто заставить процесс ждать через

Process p = Process.GetProcessById(iYourID);

И затем вызвать

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

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

Process.GetProcessesByName(strYourProcessName);
11 голосов
/ 19 августа 2010

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

10 голосов
/ 19 августа 2010
Process p = ...

bool exited = p.WaitForExit(10000); // 10 seconds timeout
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...