我可以说两个过程:记事本和taskmgr打开。我想杀死那两个或更多的进程我该怎么做? 到目前为止,我通过谷歌搜索得出这个:
Process.GetProcesses().Where(p => p.ProcessName == "notepad,taskmgr").ToList().ForEach(y => y.Kill());
不确定如何区分上述两个流程?
答案 0 :(得分:5)
该linq查询看起来只是在其名称为“notepad,taskmgr”时才查找进程。要获得两者,请使用如下查询:
Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr").ToList().ForEach(y => y.Kill());
如果您要添加更多进程,可能需要执行以下操作:
var processNamesToKill = new List<string> { "notepad", "taskmgr", "someotherprocess" };
Process.GetProcesses().Where(p => processNamesToKill.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
然后,您可以将其他进程添加到该列表中。至于找出你找到的东西,你可以在ForEach中通过y.ProcessName
访问该名称,并在有条件的情况下使用它。
编辑:如果需要,请将.exe
添加到这些进程名称。
答案 1 :(得分:3)
创建一个包含要杀死的进程的列表或数组,然后检查列表中的进程名称
List<string> killme = new List<string> { "notepad", "taskmgr" }
Process.GetProcesses().Where(p => killme.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
One Liner,在答案中被删除了:
Process.GetProcesses().Where(p => new[] {"notepad", "taskmgr"}.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
答案 2 :(得分:2)
你想这样做吗?
Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr")
.ToList().ForEach(y => y.Kill());
如果我是你,我会做的就是一次只做一个名字。对于阅读代码的人来说,理解起来要容易得多。
class Program
{
static void Main(string[] args)
{
killProcess("notepad.exe");
killProcess("taskmgr");
}
public static void killProcess(string name)
{
foreach (Process process in Process.GetProcessesByName(name))
{
process.Kill();
}
}
}
答案 3 :(得分:0)
如果你的linq的其余部分工作,那应该是什么样的
... Where( p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr" ) ...
否则,您可能想要制作一组要杀死的进程名称,例如
var set = new HashSet<string>() { "notepad.exe", "taskmgr.txt", "someotherthing.exe" };
... linq .. Where( p=> set.Contains( p.ProcessName ) )...
或集合上的其他各种连接操作。
答案 4 :(得分:0)
var processesToKill = new [] {"notepad", "iexplorer"};
var processes = Process.GetProcesses().Where(p => processesToKill.Contains(p.ProcessName)).ToList();
processes.ForEach(p => p.Kill());
答案 5 :(得分:0)
如果您有要杀死的进程列表,则可以使用Contains
,因为执行p => p.ProcessName == "notepad,taskmgr"
将无效(没有进程将使用“notepad,taskmgr”这个名称,添加一个逗号没有特别的意义)
所以请尝试类似
的内容var processesToKill = new Collection<string> { "notepad", "taskmgr" };
foreach (var process in Process.GetProcesses().Where(p => processesToKill.Contains(p)))
{
process.Kill();
}