Как определить, существует ли идентификатор процесса

Я использую С#.NET 2.0. Мне нужно определить, существует ли PID. Я придумал следующий код:

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

Есть ли лучший способ сделать это, кроме повторения всех процессов?

Ответ 1

Быстрое примечание. Вы никогда не можете определить, запущен ли процесс, отличный от вашего. Вы можете только сказать, что он работал в какой-то момент в недавнем прошлом. Процесс может просто перестать существовать в любой данный момент, включая точный момент, когда вы проверяете, есть ли соответствующий идентификатор.

При этом этот тип определения может или не может быть достаточно хорош для вашей программы. Это действительно зависит от того, что вы пытаетесь сделать.

Вот сокращенная версия кода, который вы написали.

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

Ответ 2

Здесь рискованно: откуда вы взяли этот идентификатор процесса? Если это просто номер, который вы когда-то сохраняли, исходный процесс мог бы сработать, а новый процесс мог бы работать с тем же идентификатором.

Чего вы пытаетесь достичь? Может быть лучший способ достичь вашей фактической цели.

Ответ 3

System.Diagnostics.Process.GetProcessById(iProcessID) будет вызывать ArgumentException, если процесс не существует. Хотя это не лучший способ проверить, существует ли процесс, но, надеюсь, это то, что вы ищете.