如何确定进程ID是否存在

时间:2009-10-09 18:07:05

标签: c# .net process pid

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

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

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

3 个答案:

答案 0 :(得分:20)

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

话虽这么说,这种类型的决定对你的计划来说可能是也可能不够好。这实际上取决于你想要做什么。

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

private bool ProcessExists(int id) {
  return Process.GetProcesses().Any(x => x.Id == id);
}

答案 1 :(得分:7)

这里有风险的事情是:你从哪里获得过程ID?如果它只是您之前保存的数字,原始流程可能已经死亡,新流程可能是running with the same ID

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

答案 2 :(得分:2)

如果进程不存在,

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