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

StackOverflow https://stackoverflow.com/questions/1545270

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Рискованная вещь здесь заключается в:Откуда вы взяли этот идентификатор процесса?Если это просто число, которое вы сохранили некоторое время назад, исходный процесс, возможно, прекратил работу, и новый процесс может быть выполняется с тем же идентификатором.

Чего вы пытаетесь достичь?Возможно, существует лучший способ достижения вашей реальной цели.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top