Tuez certains processus par nom de fichier .exe


Réponses:


241

Réponse rapide:

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

(laissez .exe hors du nom du processus)


2
que faire si le code ci-dessus renvoie une exception (un processus 32 bits ne peut pas accéder aux modules d'un processus 64 bits)?
Manish

40
Laissez ".exe". De MSDN: «Le nom du processus est un nom convivial pour le processus, comme Outlook, qui n'inclut pas l'extension .exe ou le chemin»

1
@AgainMe Process.Kill () envoie un signal d'arrêt à un processus, qui arrêtera son exécution où qu'il se trouve. Ceci est différent d'un signal d'interruption en ce que le processus n'aura aucune chance de répondre et / ou de nettoyer le signal. Aucune autre exécution ne se produira dans ce processus, et tous les verrous sur les ressources utilisées par ce processus seront libérés. Environment.Exit () est exécuté par le processus en cours d'exécution pour se tuer avec un code de réussite, ce qui est parfaitement sûr. Process.Kill () n'est pas aussi sûr que Environment.Exit ().
jchitel

2
Je suggère l'utilisation de LINQ: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro

2
Une option pour tuer une instance spécifique d'un processus? Je veux dire, Contains("Spotify"))tue toutes les instances de Spotify. Je veux tuer une instance particulière de Spotify.
Banee Ishaque K

38

Ma solution est d'utiliser Process.GetProcess () pour lister tous les processus.
En les filtrant pour contenir les processus que je veux, je peux ensuite exécuter la méthode Process.Kill () pour les arrêter:

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

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

Mettre à jour:

Si vous souhaitez utiliser une asyncapproche avec des méthodes récentes utiles des C# 8( Async Enumerables ), vérifiez ceci:

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

Remarque: l'utilisation de asyncméthodes ne signifie pas toujours que le code s'exécutera plus rapidement, mais au moins cela ne fera pas perdre de temps au processeur et empêchera le thread de premier plan de se bloquer pendant les opérations. Dans tous les cas, vous devez réfléchir à la version que vous pourriez souhaiter.


vous pouvez utiliser Contains au lieu d'égaux
Leandro

10
Une drôle de coïncidence est que je cherchais dans ce fil une solution pour tuer le chromedriver. Doit être un problème courant.
kerl

Pareil ici. cela ne semble pas le résoudre cependant. La console initiale qui est déclenchée est en fait une instance de chrome.exe et je suppose que vous ne voulez pas forcer la fermeture de tous ceux-ci à moins qu'il ne
s'agisse d'un


0

Si vous avez l'ID de processus ( PID), vous pouvez arrêter ce processus comme suit:

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

0

Vous pouvez tuer une instance spécifique de 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");

Résumé : peu importe si le nom contient .exe, le processus se terminera. Vous n'avez pas besoin de "quitter .exe du nom du processus", cela fonctionne à 100%.


1
une simple .Replace(".exe", "")réponse votée en tête le ferait avec un code beaucoup moins compliqué et inutile
AndrewK

L'idée est de voir la méthode avec ou sans .exe afin que les gens puissent voir plusieurs façons de la gérer ... Ce n'est pas fait pour le copier-coller ....
user7993881
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.