17

我正在使用 C# .NET 2.0。我需要确定是否存在 PID。我想出了以下代码:

private bool ProcessExists(int iProcessID)
{
    foreach (Process p in Process.GetProcesses())
    {
        if (p.Id == iProcessID)
        {
            return true;
        }
    }
    return false;
}

除了迭代所有流程之外,还有更好的方法吗?

4

3 回答 3

25

快速说明:您永远无法确定除您自己之外的进程是否正在运行。您只能说它在最近的某个时间点运行。一个进程可以在任何给定时刻简单地停止存在,包括您检查它是否具有匹配 ID 的确切时刻。

话虽如此,这种类型的决定可能对您的程序来说足够好,也可能不够好。这真的取决于你想要做什么。

这是您编写的代码的缩写版本。

private bool ProcessExists(int id) {
  return Process.GetProcesses().Any(x => x.Id == id);
}
于 2009-10-09T18:09:06.670 回答
10

这里有风险的是:你从哪里得到进程 ID?如果它只是您之前保存的一个数字,则原始进程可能已经死亡,而新进程可能正在以相同的 ID 运行

你想达到什么目的?可能有更好的方法来实现您的实际目标。

于 2009-10-09T18:11:03.893 回答
5

System.Diagnostics.Process.GetProcessById(iProcessID)如果进程不存在,将抛出 ArgumentException。虽然这不是检查进程是否存在的最佳方法,但希望这就是您正在寻找的。

于 2009-10-09T18:10:31.330 回答