Uccidi alcuni processi con il nome del file .exe


Risposte:


241

Risposta rapida:

foreach (var process in Process.GetProcessesByName("whatever"))
{
    process.Kill();
}

(tralascia .exe dal nome del processo)


2
cosa si dovrebbe fare se il codice precedente restituisce Eccezione (un processo a 32 bit non può accedere ai moduli di un processo a 64 bit)?
Manish

40
Lascia ".exe". Da MSDN: "Il nome del processo è un nome

1
@AgainMe Process.Kill () invia un segnale kill a un processo, che interromperà la sua esecuzione ovunque si trovi. Questo è diverso da un segnale di interruzione in quanto il processo non avrà la possibilità di rispondere e / o ripulirsi dal segnale. Non avverrà più alcuna esecuzione in quel processo e tutti i blocchi sulle risorse utilizzate da quel processo verranno rilasciati. Environment.Exit () viene eseguito dal processo attualmente in esecuzione per uccidersi con un codice di successo, che è perfettamente sicuro. Process.Kill () non è così sicuro come Environment.Exit ().
jchitel

2
Suggerisco l'uso di LINQ: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro

2
Qualche opzione per uccidere un'istanza specifica di un processo? Voglio dire, Contains("Spotify"))uccide tutte le istanze di Spotify. Voglio uccidere una particolare istanza di Spotify.
Banee Ishaque K

38

La mia soluzione è usare Process.GetProcess () per elencare tutti i processi.
Filtrandoli per contenere i processi che desidero, posso quindi eseguire il metodo Process.Kill () per fermarli:

var chromeDriverProcesses = Process.GetProcesses().
    Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'

foreach (var process in chromeDriverProcesses)
{
     process.Kill();
}

Aggiornare:

Nel caso in cui si desideri utilizzare l' asyncapproccio con alcuni utili metodi recenti da C# 8( Enumerabili asincroni ), controllare questo:

const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
             .Where(pr => pr.ProcessName == processName)
             .ToAsyncEnumerable()
             .ForEachAsync(p => p.Kill());

Nota: l'utilizzo di asyncmetodi non significa sempre che il codice verrà eseguito più velocemente, ma almeno non sprecherà il tempo della CPU e impedirà al thread in primo piano di bloccarsi durante le operazioni. In ogni caso, devi pensare a quale versione potresti volere.


potresti usare Contiene invece di uguale
Leandro

10
La strana coincidenza è che stavo cercando in questo thread una soluzione per uccidere il chromeedriver. Deve essere un problema comune.
kerl

Anch'io. ciò non sembra risolverlo però. La console iniziale che viene licenziata è in realtà un'istanza di chrome.exe e immagino che tu non voglia forzare la chiusura di tutti quelli a meno che non sia un agente di build / test
Dan Csharpster

16

Puoi usare Process.GetProcesses()per ottenere i processi attualmente in esecuzione, quindi Process.Kill()per terminare un processo.


6
Process.GetProcessesByName semplificherebbe questo.
ConsultUtah

cosa si dovrebbe fare se il codice precedente restituisce Eccezione (un processo a 32 bit non può accedere ai moduli di un processo a 64 bit)?
Manish

0

Se hai l'ID del processo ( PID) puoi terminare questo processo come segue:

Process processToKill = Process.GetProcessById(pid);
processToKill.Kill();

0

Puoi uccidere un'istanza specifica di MS Word.

foreach (var process in Process.GetProcessesByName("WINWORD"))
{
    // Temp is a document which you need to kill.
    if (process.MainWindowTitle.Contains("Temp")) 
        process.Kill();
}

-2
public void EndTask(string taskname)
{
      string processName = taskname.Replace(".exe", "");

      foreach (Process process in Process.GetProcessesByName(processName))
      {
          process.Kill();
      }
}

//EndTask("notepad");

Riepilogo : non importa se il nome contiene .exe, il processo terminerà. Non è necessario "tralasciare .exe dal nome del processo", funziona al 100%.


1
una semplice .Replace(".exe", "")risposta votata in alto lo farebbe con un codice molto meno contorto e non necessario
AndrewK

L'idea è di vedere il metodo con o senza .exe in modo che le persone possano vedere più modi per
gestirlo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.