通过.exe文件名杀死某些进程


Answers:


241

快速回答:

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

(从进程名称中删除.exe)


2
如果以上代码返回异常(32位进程无法访问64位进程的模块),应该怎么办?
Manish

40
删除“ .exe”。从MSDN:“进程名称是该进程的友好名称,例如Outlook,不包含.exe扩展名或路径”

1
@AgainMe Process.Kill()向进程发送终止信号,无论它发生在哪里,它都会停止执行。这与中断信号的不同之处在于,该过程将没有机会响应和/或清除该信号。该进程将不再执行,并且该进程使用的资源上的所有锁定都将被释放。Environment.Exit()由当前正在执行的进程执行,以使用成功代码杀死自己,这是绝对安全的。Process.Kill()不如Environment.Exit()安全。
jchitel '17

2
我建议使用LINQ:var procs = Process.GetProcesses()。Where(pr => pr.ProcessName.Contains(“ Spotify”));
Leandro

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# 8Async Enumerables)中的一些有用的最近方法一起使用,请检查以下内容:

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

注意:使用async方法并不总是意味着代码会运行得更快,但至少不会浪费CPU时间,并且可以防止前台线程在执行操作时挂起。无论如何,您都需要考虑可能需要的版本。


您可以使用Contains而不是
Leandro

10
有趣的巧合是,我正在此线程中寻找杀死chromedriver的解决方案。必须是一个常见问题。
凯尔

同样在这里。但这似乎无法解决。最初启动的控制台实际上是chrome.exe的一个实例,我猜您不希望强制关闭所有控制台,除非其是构建/测试代理
Dan Csharpster


0

如果您具有进程ID(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", ""),最易投票的答案将使用更少的
混乱

它的整体思路是看有或无的.exe的方法,使人们可以看到的是处理多种方式......这不意味着复制粘贴....
user7993881
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.