Как я могу знать, работает ли процесс?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

145
задан one noa 30 November 2016 в 15:19
поделиться

6 ответов

Это - способ сделать это с именем:

Process[] pname = Process.GetProcessesByName("notepad");
if (pname.Length == 0)
  MessageBox.Show("nothing");
else
  MessageBox.Show("run");

можно циклично выполнить весь процесс для получения идентификатора для более позднего управления:

Process[] processlist = Process.GetProcesses();
foreach(Process theprocess in processlist){
   Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
237
ответ дан 23 November 2019 в 22:48
поделиться

Это - самый простой способ, которым я нашел после использования отражателя. Я создал дополнительный метод для этого:

public static class ProcessExtensions
{
    public static bool IsRunning(this Process process)
    {
        if (process == null) 
            throw new ArgumentNullException("process");

        try
        {
            Process.GetProcessById(process.Id);
        }
        catch (ArgumentException)
        {
            return false;
        }
        return true;
    }
}

Эти Process.GetProcessById(processId) вызовы метода ProcessManager.IsProcessRunning(processId) метод и броски ArgumentException в случае, если процесс не существует. По некоторым причинам ProcessManager класс является внутренним...

25
ответ дан 23 November 2019 в 22:48
поделиться

Синхронное решение:

void DisplayProcessStatus(Process process)
{
    process.Refresh();  // Important


    if(process.HasExited)
    {
        Console.WriteLine("Exited.");
    }
    else
    {
        Console.WriteLine("Running.");
    } 
}

Асинхронное решение:

void RegisterProcessExit(Process process)
{
    // NOTE there will be a race condition with the caller here
    //   how to fix it is left as an exercise
    process.Exited += process_Exited;
}

static void process_Exited(object sender, EventArgs e)
{
   Console.WriteLine("Process has exited.");
}
16
ответ дан 23 November 2019 в 22:48
поделиться

Это зависит от того, как надежный Вы хотите, чтобы эта функция была. Если Вы хотите знать, работает ли конкретный экземпляр процесса, который Вы имеете все еще, и доступный с 100%-й точностью затем, Вам не повезло. Так как причина, это от управляемого процесса возражает, что существует только 2 способа определить процесс.

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

второй объект является Дескриптором Процесса. Это имеет ту же проблему, хотя, поскольку идентификатор и это являются более неудобными работать с.

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

3
ответ дан 23 November 2019 в 22:48
поделиться

Process.GetProcesses() способ пойти. Но Вы, возможно, должны использовать один или несколько различных критериев для нахождения процесса, в зависимости от того, как он работает (т.е. как услуга или нормальное приложение, имеет ли он строку заголовка).

1
ответ дан 23 November 2019 в 22:48
поделиться

Возможно (вероятно), я читаю вопрос неправильно, но являюсь Вами ищущий свойство HasExited, которое скажет Вам, что процесс, представленный Вашим объектом Процесса, вышел (или обычно или не).

, Если процесс у Вас есть ссылка на, имеет UI, который можно использовать свойство Responding, чтобы определить, отвечает ли UI в настоящее время на ввод данных пользователем или нет.

можно также установить EnableRaisingEvents и обработать событие Exited (который отправляется asychronously), или назовите WaitForExit (), если Вы хотите заблокироваться.

0
ответ дан 23 November 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: