Bunuh beberapa proses dengan nama file .exe


Jawaban:


241

Jawaban cepat:

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

(tinggalkan .exe dari nama proses)


2
apa yang harus dilakukan jika kode di atas mengembalikan Exception (proses 32 bit tidak dapat mengakses modul dari proses 64 bit)?
Manish

40
Tinggalkan ".exe". Dari MSDN: "Nama proses adalah nama yang bersahabat untuk proses, seperti Outlook, yang tidak menyertakan ekstensi .exe atau jalur"

1
@AgainMe Process.Kill () mengirimkan sinyal kill ke proses, yang akan menghentikan eksekusinya di mana pun itu terjadi. Ini berbeda dari sinyal interupsi di mana proses tidak akan memiliki kesempatan untuk merespons dan / atau membersihkan sinyal. Tidak ada lagi eksekusi yang akan terjadi dalam proses itu, dan semua kunci pada sumber daya yang digunakan oleh proses itu akan dilepaskan. Environment.Exit () dilakukan oleh proses yang saat ini dijalankan untuk mematikan dirinya sendiri dengan kode sukses, yang sangat aman. Process.Kill () hampir tidak seaman Environment.Exit ().
jchitel

2
Saya menyarankan penggunaan LINQ: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro

2
Adakah pilihan untuk menghentikan proses tertentu? Maksud saya, Contains("Spotify"))membunuh semua contoh Spotify. Saya ingin membunuh contoh tertentu dari Spotify.
Banee Ishaque K

38

Solusi saya adalah menggunakan Process.GetProcess () untuk mendaftar semua proses.
Dengan memfilternya agar berisi proses yang saya inginkan, saya kemudian dapat menjalankan metode Process.Kill () untuk menghentikannya:

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

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

Memperbarui:

Jika ingin menggunakan asyncpendekatan dengan beberapa metode terbaru yang berguna dari C# 8( Async Enumerables ), periksa ini:

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

Catatan: menggunakan asyncmetode tidak selalu berarti kode akan berjalan lebih cepat, tetapi setidaknya itu tidak akan membuang waktu CPU dan akan mencegah thread latar depan menggantung saat melakukan operasi. Bagaimanapun, Anda perlu memikirkan versi apa yang mungkin Anda inginkan.


Anda bisa menggunakan Berisi bukannya sama
Leandro

10
Kebetulan yang lucu adalah, saya sedang mencari solusi di thread ini untuk membunuh chromedriver. Pasti masalah umum.
kerl

Sama disini. itu sepertinya tidak menyelesaikannya. Konsol awal yang dimatikan sebenarnya adalah turunan dari chrome.exe dan saya rasa Anda tidak ingin menutup paksa semua itu kecuali itu adalah agen pembuat / uji
Dan Csharpster

16

Anda dapat menggunakan Process.GetProcesses()untuk mendapatkan proses yang sedang berjalan, kemudian Process.Kill()menghentikan proses.


6
Process.GetProcessesByName akan menyederhanakan ini.
ConsultUtah

apa yang harus dilakukan jika kode di atas mengembalikan Exception (proses 32 bit tidak dapat mengakses modul dari proses 64 bit)?
Manish

0

Jika Anda memiliki ID proses ( PID), Anda dapat menghentikan proses ini sebagai berikut:

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

0

Anda dapat Membunuh contoh tertentu dari 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");

Ringkasan : tidak peduli jika namanya mengandung .exe, prosesnya akan berakhir. Anda tidak perlu "meninggalkan .exe dari nama proses", Ini berfungsi 100%.


1
.Replace(".exe", "")jawaban sederhana di atas yang dipilih akan melakukan ini dengan kode yang jauh lebih berbelit-belit dan tidak perlu
AndrewK

Ide keseluruhannya adalah untuk melihat metode dengan atau tanpa .exe sehingga orang dapat melihat berbagai cara untuk menanganinya ... Ini tidak dimaksudkan untuk menyalin dan menempel ....
user7993881
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.