Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 268 269 270 271 272 273 274 275 276 ... 642
Перейти на страницу:

-&gt; PID: 908     Name: svchost

-&gt; PID: 920     Name: smss

-&gt; PID: 1016    Name: csrss

-&gt; PID: 1020    Name: NVDisplay.Container

-&gt; PID: 1104    Name: wininit

-&gt; PID: 1112    Name: csrss

************************************

Исследование конкретного процесса

В дополнение к полному списку всех выполняющихся процессов на заданной машине статический метод Process.GetProcessById() позволяет получать одиночный объект Process по ассоциированному с ним идентификатору PID. В случае запроса несуществующего PID генерируется исключение ArgumentException. Например, чтобы получить объект Process, который представляет процесс с PID, равным 30592, можно написать следующий код:

// Если процесс с PID, равным 30592, не существует,

// то сгенерируется исключение во время выполнения.

static void GetSpecificProcess()

{

  Process theProc = null;

  try

  {

    theProc = Process.GetProcessById(30592);

  }

  catch(ArgumentException ex)

  {

    Console.WriteLine(ex.Message);

  }

}

К настоящему моменту вы уже знаете, как получить список всех процессов, а также специфический процесс на машине посредством поиска по PID. Наряду с выяснением идентификаторов PID и имен процессов класс Process позволяет просматривать набор текущих потоков и библиотек, применяемых внутри заданного процесса. Давайте посмотрим, как это делается.

Исследование набора потоков процесса

Набор потоков представлен в виде строго типизованной коллекции ProcessThreadCollection, которая содержит определенное количество отдельных объектов ProcessThread. В целях иллюстрации добавьте к текущему приложению приведенный далее вспомогательный статический метод:

static void EnumThreadsForPid(int pID)

{

  Process theProc = null;

  try

  {

    theProc = Process.GetProcessById(pID);

  }

  catch(ArgumentException ex)

  {

    Console.WriteLine(ex.Message);

    return;

  }

  // Вывести статистические сведения по каждому потоку

  // в указанном процессе.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  Console.WriteLine(

    &quot;Here are the threads used by: {0}&quot;, theProc.ProcessName);

  ProcessThreadCollection theThreads = theProc.Threads;

  foreach(ProcessThread pt in theThreads)

  {

    string info =

       $&quot;-&gt; Thread ID: {pt.Id}tStart Time:

       {pt.StartTime.ToShortTimeString()}tPriority:

       {pt.PriorityLevel}&quot;;

    Console.WriteLine(info);

  }

  Console.WriteLine(&quot;************************************n&quot;);

}

Как видите, свойство Threads в типе System.Diagnostics.Process обеспечивает доступ к классу ProcessThreadCollection. Здесь для каждого потока внутри указанного клиентом процесса выводится назначенный идентификатор потока, время запуска и уровень приоритета. Обновите операторы верхнего уровня в своей программе, чтобы запрашивать у пользователя идентификатор PID процесса, подлежащего исследованию:

...

// Запросить у пользователя PID и вывести набор активных потоков.

Console.WriteLine(&quot;***** Enter PID of process to investigate *****&quot;);

Console.Write(&quot;PID: &quot;);

string pID = Console.ReadLine();

int theProcID = int.Parse(pID);

EnumThreadsForPid(theProcID);

Console.ReadLine();

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

***** Enter PID of process to investigate *****

PID: 3804

Here are the threads used by: msedge

-&gt; Thread ID: 3464      Start Time: 01:20 PM    Priority: Normal

-&gt; Thread ID: 19420     Start Time: 01:20 PM    Priority: Normal

-&gt; Thread ID: 17780     Start Time: 01:20 PM    Priority: Normal

-&gt; Thread ID: 22380     Start Time: 01:20 PM    Priority: Normal

-&gt; Thread ID: 27580     Start Time: 01:20 PM    Priority: -4

************************************

Помимо Id, StartTime и PriorityLevel тип ProcessThread содержит дополнительные члены, наиболее интересные из которых перечислены в табл. 14.4.

1 ... 268 269 270 271 272 273 274 275 276 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга