0

我可以说两个进程:记事本和 taskmgr 打开。我想杀死这两个或几个更多的进程我该怎么做?到目前为止,我通过谷歌搜索想出了这个:

Process.GetProcesses().Where(p => p.ProcessName == "notepad,taskmgr").ToList().ForEach(y => y.Kill());

不确定如何区分上述两个进程?

4

6 回答 6

5

该 linq 查询似乎仅在其名称为“记事本,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如果需要,添加到这些进程名称。

于 2012-09-25T20:45:08.367 回答
3

创建一个包含要杀死的进程的列表或数组,然后检查列表中的进程名称

List<string> killme = new List<string> { "notepad", "taskmgr" }

Process.GetProcesses().Where(p => killme.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());

一个班轮,在一个被删除的答案中:

Process.GetProcesses().Where(p => new[] {"notepad", "taskmgr"}.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
于 2012-09-25T20:44:24.110 回答
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();
        }
    }
}
于 2012-09-25T20:44:37.357 回答
0

如果你的 linq 的其余部分可以工作,那么 where 应该是这样的

... 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 ) )...

或集合上的其他各种连接操作。

于 2012-09-25T20:45:32.663 回答
0
        var processesToKill = new [] {"notepad", "iexplorer"};
        var processes = Process.GetProcesses().Where(p => processesToKill.Contains(p.ProcessName)).ToList();
        processes.ForEach(p => p.Kill());
于 2012-09-25T20:45:33.703 回答
0

如果您有要杀死的进程列表,则可以使用Contains,因为这样做p => p.ProcessName == "notepad,taskmgr"不起作用(没有进程将具有名称“记事本,taskmgr”,添加逗号没有特殊含义)

所以改为尝试类似的东西

var processesToKill = new Collection<string> { "notepad", "taskmgr" };

foreach (var process in Process.GetProcesses().Where(p => processesToKill.Contains(p)))
{
    process.Kill();
}
于 2012-09-25T20:45:45.193 回答