Процесс - концепция уровня ОС, описывающая ресурсы (память, потоки, подключенные библиотеки и проч.), используемые выполняющейся программой. Системы, которые могут выполнять много процессов одновременно, называются многозадачными.
Каждый процесс имеет один первичный поток, и может создавать дополнительные. Поток представляет собой выполняющийся одновременно с другими потоками программный код. Все потоки в рамках одного процесса разделяют общую память. Приложения, использующие несколько параллельно выполняющихся потоков, называются многопоточными.
Создание многопоточных приложений может приводить к появлению дополнительных ошибок, не возникающих в однопоточных приложениях. Например, если один поток начинает изменять какой-либо ресурс, а другой пытается прочитать его значение до полного изменения. Для избавления от таких ошибок применяется синхронизация: при обращении потока к какому-то ресурсу применяются механизмы, заставляющие другие потоки, пытающиеся получить доступ к тому же ресурсу, приостановить свое выполнение, пока ресурс не будет освобожден. Однако использование синхронизации может приводить в свою очередь к другим ошибкам, например, так называемым deadlock -ам, когда два или более потоков взаимно ожидают освобождения захваченных остальными ресурсов. При этом возобновление их работы становится невозможным. Также данные ошибки из-за трудности предсказания работы планировщика, управляющего выделением процессорного времени потокам, часто могут быть трудно воспроизводимыми и плохо поддаваться отладке. Чтобы избежать таких проблем, многопоточные приложения требуют внимательного и аккуратного подхода к разработке архитектуры взаимодействия потоков.
Для получения информации о процессах и потоках в.NET используются классы пространства имен System.Diagnostic, например:
| Process | Предоставляет доступ к локальным и удаленным процессам, а также позволяет запускать и останавливать процессы программным образом |
| ProcessModule | Представляет модуль (*.dll или *.ехе), который должен загружаться в определенный процесс. |
| ProcessStartlnfо | Позволяет указывать набор значений, которые должны использоваться при запуске процесса посредством метода Process.Start () |
| ProcessThread | Представляет поток внутри определенного процесса. Этот тип применяется для диагностики потоков в процессе, но не для запуска новых |
Некоторые члены класс Process:
| Handle | Дескриптор (IntPtr), который был назначен процессу операционной системой |
| Id | Идентификатор (PID) соответствующего процесса. |
| MachmeName | Имя компьютера, на котором выполняется соответствующий процесс. |
| MainWmdowTitle | Заголовок главного окна процесса (если нет главного окна — пустая строка). |
| ProcessName | Это свойство позволяет получать имя процесса (совпадает с именем приложения) |
| Responding | Отвечает ли приложение на запросы системы (не зависло ли оно) |
| StartTime | Время запуска процесса |
| Threads | Потоки процесса |
| CloseMainWindow() | Отправляет процессу с GUI сообщения о закрытии главного окна |
| GetCurrentProcess() | Возвращает текущий активный процесс |
| GetProcesses() | Возвращает списо выполняющихся в данный момент процессов |
| Kill() | Завершает соответствующий процесс |
| Start () | Запускает новый процесс (имеет несколько версий, позволяющих контролировать запуск, передавать приложению параметры и т.п.) |
Пример запуска приложения при помощи метода Start():
Process ieProc = null;
// Запустить Internet Explorer и перейти на страницу facebook.com.
ieProc = Process.Start("IExplore.exe", "www.facebook.com");
Console.ReadLine();
// Завершить процесс
ieProc.Kill();






