2

Я хотел бы знать разницу между приложениями, процессами и службами, как указано в диспетчере задач Windows 7. В UNIX/Linux эти термины работают следующим образом: процессы относятся к исполняемым файлам, которые выполняются в том смысле, что они были загружены в память и выполняются, и один и тот же исполняемый файл может запускаться несколько раз для создания нескольких процессов в памяти, выполняющих тот же исполняемый файл; приложения обычно представляют собой процессы, которые имеют связанный графический интерфейс пользователя; и сервисы, как правило, представляют собой процессы без заголовка, которые не отображают графический интерфейс, а работают в фоновом режиме.

Я хотел бы знать, использует ли приложение диспетчера задач Windows 7 эти термины так же, как в UNIX/Linux, как указано выше.

Благодарю.

2 ответа2

3

Большинство поставленный вопрос здесь отвечают нормально здесь , так что я не собираюсь , чтобы покрыть старые земли в настоящее время.

для сервисов, которые не запускаются как svchost.exe, что отличает их от других не сервисных процессов?

Единственное, что отличает сервис от любого другого процесса, это то, что он остается открытым, чтобы что-то реагировать. В них нет ничего особенного, но это означает, что они часто имеют определенные характеристики. Они обычно являются приложениями CLI, потому что они вообще не нуждаются (или не хотят) GUI. Они также могут быть библиотеками DLL, если для управления ими предназначен хост-процесс (такой как svchost.exe); Вообще говоря, DLL - это код, который не имеет точки входа (то есть он не может быть запущен напрямую, но программа может загрузить его в память и запустить код).

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

На самом деле в вашей системе есть два экземпляра svchost.exe. Один из них является процессом пользовательского режима, а другой принадлежит SYSTEM. Копия SYSTEM позволяет службам запускаться до того, как кто-либо войдет в систему (что большинство служб захотят сделать).

Чтобы svchost.exe знал, что делать со службой, он должен быть способен работать как DLL. Это означает, что для этого нужно реализовать DLLMain. Кроме того, он также должен иметь метод HandlerEx, который отвечает на события, которые запускает svchost.exe (SERVICE_CONTROL_STOP, SERVICE_CONTROL_SHUTDOWN, SERVICE_CONTROL_PAUSE, SERVICE_CONTROL_CONTINUE, SERVICE_CONTROL_INTERROATE).

Если служба реализовала их, то просто нужно зарегистрироваться в svchost.exe, чтобы он знал об этом. Это делается с помощью приложений sc.exe и installutil.exe.

Теперь, когда я объяснил, как все это работает, я должен упомянуть, что многое из этого устарело в новых версиях Windows. Я полагаю, что текущий предложенный подход заключается в том, что разработчики сервисов также создают свой собственный хост-процесс (собственный svchost.exe). Это связано с тем, что svchost.exe с момента своего создания был идеальным укрытием для вредоносных программ. Большинство пользователей не имеют ни малейшего представления о том, как зарегистрировать \unreg сервисы с помощью svchost.exe, а знают, как их даже увидеть (менеджер сервисов).

Не позволяя разработчикам подключаться к svchost.exe, это означает, что они должны создать новый процесс для своих служб, что означает, что этот новый процесс будет отображаться в диспетчере задач. Тем не менее, я считаю, что даже в последних версиях Windows старый метод использования sc.exe все равно будет работать для обратной совместимости. Учитывая, что пользователи Windows по-прежнему имеют дело с ошибками, существовавшими после DOS, я думаю, что это еще будет возможно в течение долгого времени. Официально svchost.exe теперь только для служб Windows.

1

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

Однако услуга - это больше, чем просто процесс без окон. (Я не эксперт, но вот еще немного информации из того, что я видел в Windows.)

Процесс без окон может вызывать окно, когда захочет, но служба изолирована от рабочего стола.

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

Если вы перейдете в раздел «Службы», то увидите, что в списке есть несколько служб, но с состоянием «Остановлено» - Windows не отслеживает такие остановленные приложения!

Если вы откроете программу Services, вы увидите, что в свойствах сервиса указывается запуск исполняемого файла с определенными аргументами командной строки.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .