2010-05-06 16 views
5

Posiblemente la inversa de esta pregunta: Process.HasExited returns true even though process is running?C#: Process.HasExited devuelve falso a pesar de que el proceso ha terminado

me llamaron Kill() en un proceso y que parece haber salido. Pero cuando pruebo HasExited, me sale falso:

myProcess.Kill(); 

while (!myProcess.HasExited) 
{ 
    Thread.Sleep(1000); 
} 

Y esto continúa indefinidamente. De acuerdo, tengo que cambiar este código para dejar de esperar con el tiempo, pero tengo curiosidad sobre por qué HasExited aún devuelve falso cuando el proceso parece haber caído del mapa, por así decirlo.

Respuesta

7

¿Está redirigiendo la salida estándar? MSDN indica lo siguiente:

Cuando la salida estándar se ha redirigido a manejadores de eventos asíncronos, es posible que el procesamiento de salida no se habrá completado cuando esta propiedad devuelve cierto. Para asegurarse de que se haya completado el manejo asíncrono de eventos, llame a la sobrecarga WaitForExit() que no toma ningún parámetro antes de verificar HasExited.

De todos modos, la solución sugerida debe posiblemente hacer el truco:

myProcess.Kill(); 
myProcess.WaitForExit(); 
+0

Así es, me redirigir la salida estándar. Sin embargo, opté por poner Kill y WaitForExit (1000) en un ciclo triple de reintento. No puedo permitirme esperar para siempre, como sugiere el artículo de MSDN. – Jeremy

+0

También me pregunto si esto significa que es posible que un proceso finalice y aún tenga abiertas sus secuencias de salida estándar. O el artículo significa que mi lector de secuencias locales no ha recibido el mensaje para cerrar a pesar de que el proceso de origen está saliendo. – Jeremy

Cuestiones relacionadas