Вбийте деякі процеси ім'ям файлу .exe


Відповіді:


241

Швидкий відповідь:

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

(залишити .exe від імені процесу)


2
що робити, якщо вище повернення коду Виняток (32-бітний процес не може отримати доступ до модулів 64-бітного процесу)?
Маніш

40
Залиште ".exe". Від MSDN: "Ім'я процесу - це дружнє ім'я для процесу, наприклад Outlook, яке не включає розширення .exe або шлях"

1
@AgainMe Process.Kill () посилає сигнал вбивства процесу, який зупинить його виконання, де б це не було. Це відрізняється від сигналу переривання тим, що процес не матиме можливості реагувати та / або очищатись від сигналу. Більше виконання в цьому процесі не відбуватиметься, і будь-які блокування ресурсів, використовуваних цим процесом, будуть випущені. Environment.Exit () виконується в даний час виконуючим процес вбивства з кодом успіху, який абсолютно безпечний. Process.Kill () не є настільки безпечним, як Environment.Exit ().
jchitel

2
Я пропоную використовувати LINQ: var procs = Process.GetProcess (). Де (pr => pr.ProcessName.Contains ("Spotify"));
Леандро

2
Будь-який варіант вбити конкретний екземпляр процесу? Я маю на увазі, Contains("Spotify"))вбиває всі випадки Spotify. Я хочу вбити конкретний екземпляр Spotify.
Banee Ishaque K

38

Моє рішення - використовувати Process.GetProcess () для перерахування всіх процесів.
Відфільтрувавши їх до вмісту потрібних процесів, я можу запустити метод Process.Kill (), щоб зупинити їх:

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

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

Оновлення:

Якщо ви хочете використати asyncпідхід з деякими корисними останніми методами з C# 8( Async Enumerables ), перевірте це:

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

Примітка: використання asyncметодів не завжди означає, що код запуститься швидше, але, принаймні, це не витратить час процесора і запобіжить зависання потоку переднього плану під час виконання операцій. У будь-якому випадку вам потрібно подумати про те, яку версію ви могли б хотіти.


ви можете використовувати Contains замість рівних
Леандро

10
Кумедний збіг обставин полягає в тому, що я шукав у цій нитці рішення про вбивство хромодрука. Це повинно бути загальним питанням.
kerl

Те ж саме. але, схоже, це не вирішує. Початкова консоль, яку звільняють, насправді є примірником chrome.exe, і я здогадуюсь, що ви не хочете змушувати закривати всіх тих, якщо її збудник / тестовий агент
Ден Кшарпстер

16

Ви можете використовувати Process.GetProcesses()для отримання поточно запущених процесів, а потім Process.Kill()для вбивства.


6
Process.GetProcessByName спростив би це.
ConsultUtah

що робити, якщо вище повернення коду Виняток (32-бітний процес не може отримати доступ до модулів 64-бітного процесу)?
Маніш

0

Якщо у вас є ідентифікатор процесу ( PID), ви можете вбити цей процес наступним чином:

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

0

Ви можете вбити конкретний екземпляр 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");

Підсумок : незалежно від того, чи містить ім'я .exe, процес закінчиться. Вам не потрібно "залишати .exe від імені процесу", це працює на 100%.


1
проста .Replace(".exe", "")відповідь у верхній частині голосової відповіді зробить це з набагато менш заплутаним та непотрібним кодом
AndrewK

Вся ідея його полягає в тому, щоб побачити метод з .exe або без нього, щоб люди могли бачити кілька способів поводження з ним ... Це не призначено для копіювання та вставки ....
user7993881
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.