Pages Menu
Categories Menu

Опубликовано | Нет комментариев

Процессы, потоки и задания

Хотя при поверхностном взгляде программы и процессы похожи друг на друга, на самом деле они в корне различаются. Программа — это статическая последовательность инструкций, в то время как процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. На самом высоком уровне абстракции Windows-процесс включает в себя следующее:

  • закрытое виртуальное адресное пространство, являющееся набором адресов виртуальной памяти, которым процесс может воспользоваться;
  • исполняемую программу, определяющую исходный код и данные, и отображаемую на виртуальное адресное пространство процесса;
  • перечень открытых дескрипторов (описателей) различных системных ресурсов — семафоров, коммуникационных портов и файлов, доступных всем потокам процесса;
  • связанную с процессом среду безопасности, называемую маркером доступа, идентифицирующим пользователя, группы безопасности, права доступа, виртуализированное состояние системы управления учетными записями пользователей — User Account Control (UAC), сессию и ограниченное состояние учетной записи пользователя;
  • уникальный идентификатор, называемый идентификатором процесса, - process ID (внутренняя часть идентификатора называется идентификатором клиента — client ID);
  • как минимум один поток выполнения (хотя возможен и абсолютно бесполезный «пустой» процесс).

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

Эксперимент: просмотр дерева процессов.

Одним из уникальных атрибутов, относящихся к процессу и неотображаемых большинством инструментальных средств, является идентификатор родительского процесса или процесса-создателя (parent or creator process ID).

Это значение можно извлечь с помощью Системного монитора (Performance Monitor) или программным способом, путем запроса Creating Process ID.

Дерево процессов может показать такое средство, как Tlist.exe (из состава предназначенных для Windows средств отладки Debugging Tools), используемое с ключом /t. Рассмотрим пример вывода, полученного в результате выполнения команды tlist /t:

C:\>tlist /t

System Process (0)

System (4)

smss.exe (224)

csrss.exe (384)

csrss.exe (444)

conhost.exe (3076) OleMainThreadWndName

winlogon.exe (496)

wininit.exe (504)

services.exe (580)

svchost.exe (696)

svchost.exe (796)

svchost.exe (912)

svchost.exe (948)

svchost.exe (988)

svchost.exe (244)

WUDFHost.exe (1008)

dwm.exe (2912) DWM Notification Window

btwdins.exe (268)

svchost.exe (1104)

svchost.exe (1192)

svchost.exe (1368)

svchost.exe (1400)

spoolsv.exe (1560)

svchost.exe (1860)

svchost.exe (1936)

svchost.exe (1124)

svchost.exe (1440)

svchost.exe (2276)

taskhost.exe (2816) Task Host Window

svchost.exe (892)

lsass.exe (588)

lsm.exe (596)

explorer.exe (2968) Program Manager

cmd.exe (1832) Administrator: C:\Windows\system32\cmd.exe - "c:\tlist.exe" /t

tlist.exe (2448)

Чтобы показать взаимоотношения каждого процесса с его родительскими и дочерними процессами, применяются отступы. Процессы, родители которых прекратили свое существование, выровнены по левому краю (как Explorer.exe в предыдущем примере), поскольку, даже при наличии прародительского процесса, способов обнаружения связи с ним просто не существует. Windows сохраняет только идентификатор процесса-создателя и не дает ссылок на создателя этого создателя и т. д.

Чтобы продемонстрировать тот факт, что Windows не отслеживает более одного идентификатора родительского процесса, выполните следующие действия:

  1. Откройте окно командной строки.
  2. Наберите title Parent, чтобы изменить заголовок окна на «Parent» (родительский).
  3. Наберите start cmd (что приведет к запуску второго окна командной строки).
  4. Наберите во втором окне командной строки title Child, чтобы изменить заголовок окна на «Child» (дочерний).
  5. Откройте Диспетчер задач.
  6. Наберите во втором окне командной строки mspaint (команду, запускающую Microsoft Paint).
  7. Снова обратитесь ко второму окну командной строки и наберите exit. (Заметьте, что Paint остается в рабочем состоянии.)
  8. Перейдите в Диспетчер задач.
  9. Щелкните на вкладке "Приложения".
  10. Щелкните правой кнопкой мыши на задаче Parent и выберите пункт "Перейти к процессу".
  11. Щелкните правой кнопкой мыши на процессе cmd.exe и выберите пункт "Завершить дерево процессов".
  12. В окне подтверждения Диспетчера задач щелкните на кнопке "Завершить дерево процессов".

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

Для просмотра процессов и информации о них (а также для внесения изменений) используется несколько инструментальных средств. В описанных ниже экспериментах иллюстрируются различные виды информации о процессах, которые могут быть получены с помощью некоторых из этих средств. Большинство этих средств входит в состав самой Windows, а также в состав отладочного комплекта Debugging Tools for Windows и в состав Windows SDK, но есть и другие автономные средства под маркой Sysinternals. Многие из этих средств показывают частично совпадающие поднаборы сведений об основных процессах и потоках, которые иногда идентифицируются по-разному.

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

Продолжение в следующей статье.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

↓