我正在使用C#.NET 2.0。我需要确定PID是否存在。我想出了以下代码:
private bool ProcessExists(int iProcessID)
{
foreach (Process p in Process.GetProcesses())
{
if (p.Id == iProcessID)
{
return true;
}
}
return false;
}
除了迭代所有进程之外,还有更好的方法吗?
答案 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。虽然这不是检查流程是否存在的最佳方法,但希望这是您正在寻找的。 p>