【问题标题】:How to determine if a process ID exists如何判断进程ID是否存在
【发布时间】:2010-12-05 10:34:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net process pid


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      这里的风险是:您从哪里获得该进程 ID?如果它只是您之前保存的一个数字,则原始进程可能已经死亡,而新进程可能是running with the same ID

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

      【讨论】:

      • PID 是可靠的。它是启动我的应用程序的第二个应用程序的 PID。第二个应用程序保证在我的应用程序运行时始终运行。 (我的应用程序本质上是一个以第二个应用程序作为其父应用程序的对话框。)除此之外,为了这个问题,科学怪人的详细信息不值得讨论。谢谢。
      • 但是您的问题是关于确定它是否正在运行。如果保证可以运行,为什么还要检查?
      • 好点。这是一个健全的检查,以防异常情况确实由于某种我无法理解的原因发生。我将编辑问题文本以更好地表示示例代码实际在做什么。谢谢。
      【解决方案3】:

      System.Diagnostics.Process.GetProcessById(iProcessID) 会在进程不存在时抛出 ArgumentException。虽然这不是检查进程是否存在的最佳方式,但希望这是您正在寻找的。​​p>

      【讨论】:

      • 感谢您的建议,但作为标准做法,我通常不会在尝试解决某些值时捕获异常。
      • 我同意,但希望这是您的程序正在寻找的,想不出检查特定进程 ID 是否存在的理由。
      猜你喜欢
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 2021-07-26
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多