2009-10-09 13 views
11

Estoy usando C# .NET 2.0. Necesito determinar si existe un PID. Se me ocurrió el siguiente código:Cómo determinar si existe un ID de proceso

private bool ProcessExists(int iProcessID) 
{ 
    foreach (Process p in Process.GetProcesses()) 
    { 
     if (p.Id == iProcessID) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

¿Hay una manera mejor de hacer esto aparte de iterar todos los procesos?

Respuesta

18

Nota rápida: nunca podrá determinar si se está ejecutando un proceso diferente al suyo. Solo puede decir que se estaba ejecutando en algún momento del pasado reciente. Un proceso simplemente puede dejar de existir en cualquier momento dado, incluido el momento exacto en que comprueba si tiene una ID coincidente.

Dicho esto, este tipo de determinación puede o no ser lo suficientemente bueno para su programa. Realmente depende de lo que estás tratando de hacer.

Aquí hay una versión abreviada del código que escribió.

private bool ProcessExists(int id) { 
    return Process.GetProcesses().Any(x => x.Id == id); 
} 
2

System.Diagnostics.Process.GetProcessById(iProcessID) arrojaría ArgumentException si el proceso no existe. Aunque esa no es la mejor manera de verificar si el proceso existe, pero con suerte esto es lo que estás buscando.

+0

Gracias por la sugerencia, pero en general me equivoco al no detectar excepciones cuando intento resolver algún valor, como práctica habitual. – Ken

+0

Estoy de acuerdo, pero esperaba que esto fuera lo que estaba buscando su programa, no podía pensar en una razón para verificar si una identificación de proceso específica estaba activa. –

6

Lo arriesgado aquí es: ¿De dónde sacaste esa identificación de proceso? Si se trata solo de un número que haya guardado alguna vez antes, el proceso original podría haber muerto y un nuevo proceso podría ser running with the same ID.

¿Qué estás tratando de lograr? Puede haber una mejor manera de lograr su objetivo real.

+0

El PID es confiable. Es el PID de una segunda aplicación que lanza mi aplicación. La segunda aplicación está garantizada para ejecutarse siempre mientras mi aplicación se está ejecutando. (Mi aplicación es esencialmente una DialogBox que tiene la segunda aplicación como su principal). Aparte de eso, los detalles de Frankenstein no valen la pena por el bien de esta pregunta. Gracias. – Ken

+0

Pero su pregunta es sobre determinar si se está ejecutando. Si se garantiza que se está ejecutando, ¿por qué tienes que verificar? –

+0

Buen punto. Es un control de cordura en caso de que, de hecho, el caso excepcional ocurra por alguna razón que me supera. Editaré el texto de la pregunta para representar mejor lo que realmente está haciendo el código de muestra. Gracias. – Ken

Cuestiones relacionadas