如何确定进程ID是否存在

Ken*_*Ken 12 .net c# pid process

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

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

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

Jar*_*Par 20

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

话虽这么说,这种类型的决定可能或可能不足以满足您的计划.这实际上取决于你想要做什么.

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

private bool ProcessExists(int id) {
  return Process.GetProcesses().Any(x => x.Id == id);
}
Run Code Online (Sandbox Code Playgroud)


Eri*_* J. 7

这里有风险的事情是:你从哪里获得过程ID?如果它只是您之前保存的数字,则原始进程可能已经死亡,并且可以使用相同的ID运行新进程.

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


Yur*_*ich 6

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