Подтвердить что ты не робот

Как я могу перечислить все процессы, запущенные в Windows?

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

Проблема разбита на две части:

  • Поиск всех процессов
  • Поиск атрибутов диагностики о них

Я не уверен даже в том, какое пространство имен нужно искать. Любая помощь/советы/ссылки благодарны.

4b9b3361

Ответ 1

Поиск всех процессов

Вы можете сделать это через класс Process

using System.Diagnostics;
...
var allProcceses = Process.GetProcesses();

Диагностика выполнения

Можете ли вы дать нам дополнительную информацию здесь? Не понятно, что вы хотите сделать.

Класс процесса предоставляет немного информации, хотя это может помочь вам. Можно запросить этот класс для

  • Все темы
  • Ручка главного окна
  • Все загруженные модули
  • Различные диагностические данные о памяти (Paged, Virtual, Working Set и т.д.)
  • Основная информация о процессе (id, name, disk location)

ИЗМЕНИТЬ

Op сказал, что они хотят получить информацию о памяти и процессоре. Эти свойства легко доступны в классе Process (возвращается GetProcesses()). Ниже приведена страница MSDN, в которой перечислены все поддерживаемые свойства. Существуют различные возможности памяти и процессора, которые будут соответствовать вашим потребностям.

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

Код:

Добавьте эту строку в список использования:

using System.Diagnostics;

Теперь вы можете получить список процессов с помощью метода Process.GetProcesses(), как показано в этом примере:

Process[] processlist = Process.GetProcesses();

foreach (Process theprocess in processlist) {
    Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}

Ответ 2

Поиск всех процессов довольно просто:

using System.Diagnostics;

            Process[] processes = Process.GetProcesses();

            foreach (Process process in processes)
            {
               //Get whatever attribute for process
            }

Ответ 3

JaredPar уже указал класс Process, поэтому я просто добавлю, что вам следует знать, что класс принимает моментальный снимок информации о процессе при создании экземпляра. Это не живой взгляд. Чтобы обновить его, вы должны вызвать Refresh() в экземпляре.

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

И, наконец, если вы вызовете Process.GetProcesses(), вы также получите псевдопроцессы "без дела" и "система". IIRC у них есть определенные идентификаторы процессов, поэтому вы можете легко их отфильтровать.

Ответ 4

Какую операционную систему вы используете? Я беру его из вашего тега С#, который он окончил?

Если это так, проверьте WMI, особенно класс Win32_Process. Здесь ссылка MSDN: http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx

Как и несколько сценариев использования здесь (например, получение списка процессов): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx

Ответ 5

Хорошо, вы можете сделать это в powershell

1.Определение всех процессов

get-Process 

2.Информация о диагностике о них

get-Process | where-object { $_.Handles -gt 200 }

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

Для получения дополнительной информации о как обрабатывать процессы с помощью powershell см. это

Ответ 6

using System.Diagnostics;

class Program
{
   static void Main()
   {   
      Process[] processlist = Process.GetProcesses();`          
   }
}

здесь обработчик процесса содержит все количество присутствующих в нем процессов.