Zabij niektóre procesy według nazwy pliku .exe


Odpowiedzi:


241

Szybka odpowiedź:

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

(zostaw .exe z nazwy procesu)


2
co należy zrobić, jeśli powyższy kod zwróci wyjątek (procesy 32-bitowe nie mogą uzyskać dostępu do modułów procesu 64-bitowego)?
Manish

40
Pozostaw „.exe”. Z MSDN: „Nazwa procesu to przyjazna nazwa procesu, taka jak Outlook, która nie zawiera rozszerzenia .exe ani ścieżki”

1
@AgainMe Process.Kill () wysyła sygnał zabicia do procesu, który zatrzyma jego wykonanie, gdziekolwiek to nastąpi. Różni się to od sygnału przerwania tym, że proces nie będzie miał szansy odpowiedzieć i / lub oczyścić się z sygnału. W tym procesie nie będzie więcej wykonywania, a wszelkie blokady zasobów używanych przez ten proces zostaną zwolnione. Environment.Exit () jest wykonywana przez aktualnie wykonywany proces, aby zabić się kodem sukcesu, co jest całkowicie bezpieczne. Process.Kill () nie jest tak bezpieczny jak Environment.Exit ().
jchitel

2
Proponuję użycie LINQ: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro

2
Czy jest jakaś opcja zabicia określonej instancji procesu? To znaczy, Contains("Spotify"))zabija wszystkie instancje Spotify. Chcę zabić konkretną instancję Spotify.
Banee Ishaque K

38

Moim rozwiązaniem jest użycie Process.GetProcess () do wyświetlenia wszystkich procesów. Filtrując
je tak, aby zawierały procesy, które chcę, mogę następnie uruchomić metodę Process.Kill () , aby je zatrzymać:

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

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

Aktualizacja:

W przypadku, gdy chcesz użyć asyncpodejścia z kilkoma przydatnymi najnowszymi metodami z C# 8( Async Enumerables ), sprawdź to:

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

Uwaga: używanie asyncmetod nie zawsze oznacza, że ​​kod będzie działał szybciej, ale przynajmniej nie zmarnuje czasu procesora i zapobiegnie zawieszaniu się wątku pierwszego planu podczas wykonywania operacji. W każdym razie musisz się zastanowić, jakiej wersji możesz potrzebować.


możesz użyć Zawartości zamiast równych
Leandro

10
Zabawny zbieg okoliczności, że szukałem w tym wątku rozwiązania problemu zabicia chromowanego pilota. To musi być powszechny problem.
kerl

To samo tutaj. to jednak nie wydaje się rozwiązać tego problemu. Początkowa konsola, która zostaje zwolniona, jest w rzeczywistości instancją chrome.exe i domyślam się, że nie chcesz wymuszać ich zamknięcia, chyba że jest to agent kompilacji / testowania
Dan Csharpster


0

Jeśli masz identyfikator procesu ( PID), możesz zabić ten proces w następujący sposób:

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

0

Możesz zabić określoną instancję 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");

Podsumowanie : bez względu na to, czy nazwa zawiera .exe, proces się zakończy. Nie musisz "zostawiać .exe z nazwy procesu", to działa w 100%.


1
prosta .Replace(".exe", "")odpowiedź głosowana na górze wystarczyłaby do tego z dużo mniej zawiłym i niepotrzebnym kodem
AndrewK

Chodzi o to, aby zobaczyć metodę z rozszerzeniem .exe lub bez, aby ludzie mogli zobaczyć wiele sposobów jej obsługi ... Nie jest przeznaczony do kopiowania i wklejania ....
user7993881
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.