2010-08-19 19 views
15

Quiero matar a un proceso que se ejecuta en la máquina utilizando taskkill si todavía están funcionando después de X segundos (un servicio de Windows se detuvo, pero se necesita tiempo para los procesos a desaparecer) Cuál es la forma más correcta de lograr lo anterior en C# (.NET 2.0 o posiblemente 3.0)?Espere hasta que el proceso ya no se ejecuta o hasta que haya pasado el tiempo de espera, lo que ocurra primero

He método de utilidad para la verificación de si un proceso todavía se está ejecutando, dado el nombre de proceso (utilizando Process.GetProcesses()). (A medida que el proceso no se genera por mi código, no puedo usar WaitTillExit saber cuando es ya no correr)

PD: el proceso se ejecuta en una máquina remota

Respuesta

31

De hecho, puede usar Process.WaitForExit().

conseguir simplemente el proceso de esperar a través de

Process p = Process.GetProcessById(iYourID); 

y luego llamar

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

También puede obtener a través de los procesos de su nombre por

Process.GetProcessesByName(strYourProcessName); 
+0

¡Genial! Ahora, si puedo que esto funcione en la máquina remota, esto es justo lo necesario (ya que necesito para matar a un montón de procesos con el mismo nombre exe) Gracias! – akapulko2020

11

Se podría llamar Process.WaitForExit, pasando el Tiempo de espera apropiado. De esta forma, no necesitará usar su propio cheque para ver si el proceso aún se está ejecutando.

+0

No estoy seguro de cómo Esto logra "matar" el proceso si es hasta que se ejecuta después de que ha pasado el tiempo de espera, sin embargo ... – akapulko2020

+0

Pensé que ibas a usar t Askkill? –

+0

'WaitForExit' devuelve' false' si el proceso aún se está ejecutando después del tiempo de espera; utilizar esto para determinar si matarlo –

8
Process p = ... 

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