2009-10-09 17 views
11

Sto usando C# .NET 2.0. Devo determinare se esiste una PID. Sono venuto con il seguente codice:Come determinare se esiste un ID di processo

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

Esiste un modo migliore per fare questo diverso iterazione tutti i processi?

risposta

18

Nota rapida: non è possibile determinare se un processo, diverso dal proprio, è in esecuzione. Puoi solo dire che stava funzionando ad un certo punto nel passato recente. Un processo può semplicemente cessare di esistere in qualsiasi momento, compreso il momento esatto in cui controlli per vedere se ha un ID corrispondente.

Detto questo, questo tipo di determinazione può essere o non essere abbastanza buono per il tuo programma. Dipende davvero da cosa stai cercando di fare.

Ecco una versione abbreviata del codice che hai scritto.

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

System.Diagnostics.Process.GetProcessById(iProcessID) genererebbe ArgumentException se il processo non esiste. Anche se questo non è il modo migliore per verificare se il processo esiste, ma si spera che questo sia quello che stai cercando.

+0

Grazie per il suggerimento, ma in genere mi sbaglio contro la cattura di eccezioni nel tentativo di risolvere qualche valore, come pratica standard. – Ken

+0

Sono d'accordo, ma speravo che questo fosse ciò che il tuo programma cercava, non potevo pensare a un motivo per verificare se un ID processo specifico fosse vivo. –

6

La cosa rischiosa qui è: da dove hai ricevuto l'ID processo? Se è solo un numero che hai salvato prima, il processo originale potrebbe essere morto e un nuovo processo potrebbe essere running with the same ID.

Cosa stai cercando di realizzare? Potrebbe esserci un modo migliore per raggiungere il tuo obiettivo reale.

+0

Il PID è affidabile. È il PID di una seconda applicazione che avvia la mia applicazione. La seconda applicazione è garantita per essere sempre in esecuzione mentre la mia applicazione è in esecuzione. (La mia applicazione è essenzialmente un DialogBox che ha la seconda applicazione come genitore.) Oltre a questo, i dettagli di Frankenstein non valgono la pena di entrare nell'interesse di questa domanda. Grazie. – Ken

+0

Ma la tua domanda è di determinare se è in esecuzione. Se è garantito che sia in esecuzione, perché è necessario controllare? –

+0

Buon punto. È un controllo di integrità nel caso in cui il caso eccezionale avvenga in realtà per qualche motivo che è al di là di me. Modificherò il testo della domanda per rappresentare meglio ciò che il codice di esempio sta effettivamente facendo. Grazie. – Ken

Problemi correlati