【发布时间】:2011-03-21 16:42:39
【问题描述】:
如何通过在 C# .NET 或 C++ 中搜索它们的 .exe 文件名来终止某些活动进程?
【问题讨论】:
-
如果您需要按部分名称杀死进程,请参阅stackoverflow.com/questions/14632162/…。
标签: c# c++ process exe kill-process
如何通过在 C# .NET 或 C++ 中搜索它们的 .exe 文件名来终止某些活动进程?
【问题讨论】:
标签: c# c++ process exe kill-process
我的解决方案是使用Process.GetProcess() 列出所有进程。
通过过滤它们以包含我想要的进程,然后我可以运行Process.Kill() 方法来停止它们:
var chromeDriverProcesses = Process.GetProcesses().
Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'
foreach (var process in chromeDriverProcesses)
{
process.Kill();
}
更新:
如果您想以 异步 方式(使用 C# 8 Async Enumerables)执行相同操作,请查看:
const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
.Where(pr => pr.ProcessName == processName)
.ToAsyncEnumerable()
.ForEachAsync(p => p.Kill());
注意:使用async 方法并不总是意味着代码会运行得更快。
主要好处是前台线程在运行时会被释放。
【讨论】:
您可以杀死 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();
}
【讨论】:
如果您有进程 ID (PID),您可以按如下方式终止该进程:
Process processToKill = Process.GetProcessById(pid);
processToKill.Kill();
【讨论】:
public void EndTask(string taskname)
{
string processName = taskname.Replace(".exe", "");
foreach (Process process in Process.GetProcessesByName(processName))
{
process.Kill();
}
}
//EndTask("notepad");
总结:无论名称中是否包含.exe,进程都会结束。您不需要“从进程名称中删除 .exe”,它可以 100% 工作。
【讨论】:
.Replace(".exe", "") 在投票最多的答案中可以用更少的复杂和不必要的代码来做到这一点
快速回答:
foreach (var process in Process.GetProcessesByName("whatever"))
{
process.Kill();
}
(从进程名称中去掉 .exe)
【讨论】:
Contains("Spotify")) 会杀死 Spotify 的所有实例。 我想杀死 Spotify 的特定实例。
您可以使用Process.GetProcesses() 获取当前正在运行的进程,然后使用Process.Kill() 杀死一个进程。
【讨论】: