Giết một số tiến trình bằng tên tệp .exe


Câu trả lời:


241

Câu trả lời nhanh:

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

(bỏ .exe từ tên tiến trình)


2
Phải làm gì nếu mã trên trả về Ngoại lệ (quy trình 32 bit không thể truy cập các mô-đun của quy trình 64 bit)?
Manish

40
Để lại ".exe". Từ MSDN: "Tên quy trình là tên thân thiện cho quy trình, chẳng hạn như Outlook, không bao gồm phần mở rộng .exe hoặc đường dẫn"

1
@AgainMe Process.Kill () gửi tín hiệu tiêu diệt đến một tiến trình, điều này sẽ tạm dừng việc thực thi bất cứ nơi nào nó xảy ra. Điều này khác với tín hiệu ngắt ở chỗ quá trình sẽ không có cơ hội phản hồi và / hoặc dọn sạch khỏi tín hiệu. Không có thực thi nữa sẽ xảy ra trong quy trình đó và bất kỳ khóa nào trên các tài nguyên được sử dụng bởi quy trình đó sẽ được phát hành. Môi trường.Exit () được thực hiện bởi quy trình hiện đang thực thi để tự giết mình bằng mã thành công, điều này hoàn toàn an toàn. Process.Kill () gần như không an toàn như Môi trường.Exit ().
jchlist

2
Tôi đề nghị sử dụng LINQ: var procs = Process.GetProcesses (). Trong đó (pr => pr.ProcessName.Contains ("Spotify"));
Leandro

2
Bất kỳ tùy chọn để giết một trường hợp cụ thể của một quá trình? Ý tôi là, Contains("Spotify"))giết chết tất cả các trường hợp Spotify. Tôi muốn giết một ví dụ cụ thể Spotify.
Banee Ishaque K

38

Giải pháp của tôi là sử dụng Process.GetProcess () để liệt kê tất cả các quy trình.
Bằng cách lọc chúng để chứa các quy trình tôi muốn, sau đó tôi có thể chạy phương thức Process.Kill () để ngăn chặn chúng:

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

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

Cập nhật:

Trong trường hợp nếu muốn sử dụng asyncphương pháp tiếp cận với một số phương thức hữu ích gần đây từ C# 8( Async Enumerables ), thì hãy kiểm tra điều này:

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

Lưu ý: sử dụng asynccác phương thức không phải lúc nào cũng có nghĩa là mã sẽ chạy nhanh hơn, nhưng ít nhất nó sẽ không lãng phí thời gian của CPU và sẽ ngăn luồng tiền cảnh bị treo trong khi thực hiện các thao tác. Trong mọi trường hợp, bạn cần suy nghĩ về phiên bản bạn có thể muốn.


bạn có thể sử dụng Chứa thay vì bằng nhau
Leandro

10
Sự trùng hợp hài hước là, tôi đã tìm kiếm chủ đề này để tìm giải pháp tiêu diệt chromedriver. Phải là một vấn đề phổ biến.
kerl

Tương tự ở đây. điều đó dường như không giải quyết nó mặc dù. Bảng điều khiển ban đầu bị loại bỏ thực sự là một phiên bản của chrome.exe và tôi đoán bạn không muốn buộc tất cả những thứ đó trừ khi nó là tác nhân xây dựng / thử nghiệm
Dan Csharpster


0

Nếu bạn có ID tiến trình ( PID), bạn có thể hủy quy trình này như sau:

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

0

Bạn có thể Giết một phiên bản cụ thể của 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");

Tóm tắt : không có vấn đề nếu tên chứa .exe, quá trình sẽ kết thúc. Bạn không cần phải "rời khỏi .exe từ tên tiến trình", Nó hoạt động 100%.


1
một .Replace(".exe", "")câu trả lời đơn giản được bình chọn hàng đầu sẽ làm điều này với mã ít phức tạp hơn và không cần thiết
AndrewK

Toàn bộ ý tưởng của nó là xem phương thức có hoặc không có .exe để mọi người có thể thấy nhiều cách xử lý ... Nó không có nghĩa là sao chép và dán ....
user7993881
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.