代码之家  ›  专栏  ›  技术社区  ›  Ken

如何确定进程ID是否存在

  •  12
  • Ken  · 技术社区  · 16 年前

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

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

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

    3 回复  |  直到 8 年前
        1
  •  24
  •   JaredPar    16 年前

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

    private bool ProcessExists(int id) {
      return Process.GetProcesses().Any(x => x.Id == id);
    }
    
        2
  •  10
  •   Eric J.    16 年前

    这里的风险在于:您从哪里获得流程ID?如果这只是您之前保存的一个数字,则原始进程可能已停止,而新进程可能已停止 running with the same ID .

        3
  •  4
  •   Sammy    10 年前

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