Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Завершение процесса

Читайте также:
  1. Билет 10. Характеристика воображения как психического процесса.
  2. Билет 10. Характеристика воображения как психического процесса.
  3. Билет 8. Характеристика памяти как психического процесса.
  4. В теории и практике планирования могут также выделяться другие виды планирования, охватывающие как главные, так и второстепенные аспекты этого процесса.
  5. ГЛАВА 3. ЭВОЛЮЦИЯ КЛАССИЧЕСКОЙ ШКОЛЫ В ПЕРВОЙ ПОЛОВИНЕ XIX ВЕКА. ЗАВЕРШЕНИЕ КЛАССИЧЕСКОЙ ТРАДИЦИИ.
  6. Завершение борьбы сыновей Владимира. Брячислав Полоцкий. Мстислав Тмутараканский. 1019 – 1026 гг.
  7. Завершение конфликта.
  8. ЗАВЕРШЕНИЕ НАУЧНОЙ РЕВОЛЮЦИИ В XVIII в.
  9. Завершение отношений РА и рекламодателя
  10. Завершение потока

Любой процесс в ОС Windows может быть завершен четырьмя следующими способами:

1. Путем возврата управления из основной функции первичного потока процесса;

2. Вызовом системной функции завершения процесса ExitProcess (), которая может вызываться в одном из потоков завершаемого процесса;

3. Вызовом функции уничтожения процесса TerminateProcess () в любом потоке другого процесса;

4. Одновременным выполнением во всех потоках данного процесса функции завершения потока ExitThread () или функции уничтожения потока TerminateThread ().

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

1. Все объекты и классы, созданные в потоке, уничтожаются соответствующими деструкторами;

2. Освобождается память, которую занимал стек первичного потока;

3. Устанавливается код завершения процесса, который возвращается из основной функции программы первичного потока;

4. Счетчик числа пользователей объекта ядра типа «процесс» уменьшается на единицу.

· Счетчик числа пользователей объекта ядра – это системный элемент данных, сопровождающий каждый объект ядра. Для объектов типа «процесс» и «поток» значения этого счетчика хранятся в информационной структуре PROCESS_INFORMATION. Назначение следующее: в момент создания объекта ядра, счетчику присваивается единица. Когда к существующему объекту ядра выполняется обращение, например, из другого процесса, состояние счетчика увеличивается на единицу. Когда какой-либо процесс завершается, то состояние счетчиков всех используемых им объектов ядра автоматически уменьшается на единицу. Как только состояние счетчика объекта ядра становится равным нулю, ядро уничтожает этот объект.

Способ второй. Функция ExitProcess завершает текущий процесс и принимает код его завершения из основной функции первичного потока. Возвращаемого значения эта функция не имеет, а выполняет лишь действие по завершению процесса. Данная функция вызывается и исполняется при нормальном завершении процесса в ходе выполнения стартовой функции, после того как первичный поток завершает свое выполнение. Самостоятельный вызов этой функции в любом потоке процесса возможен, но имеет особенности. Они состоят в том, что текущий процесс, в частности, его объект ядра, уничтожаются, но в то же время, выполнение программы основной функции может быть не завершено. В результате, все ранее созданные объектно-ориентированные элементы программы уничтожаются не их деструкторами, как должно быть при нормальном завершении, а их функционирование прекращается за счет внешнего воздействия. Такое завершение может привести к непредсказуемым ошибкам в системе. Поэтому применять функцию ExitProcess для самостоятельного применения процесса не рекомендуется.

Третий способ. Заключается в применении функции TerminateProcess ().

Отличие от ExitProcess() состоит в том, что данная функция выполняется в любом потоке другого процесса. С её помощью может завершаться не только текущий, но и произвольный процесс. Входным параметром этой функции является дескриптор завершаемого процесса, а выходным – код завершаемого процесса. Обычно, эта функция используется в крайних случаях, когда требуется экстренное завершение процесса. Как правило, действие этой функции оказывается внезапным для текущего процесса, поэтому он может не успеть выполнить все операции по нормальному завершению, как то освобождение ресурсов, закрытие объектов, сохранение промежуточных результатов во внешней памяти и т. д. Все эти операции выполняются системой, и в связи с этим, появляется вероятность потери промежуточных данных процесса.

Четвертый способ. Соответствует случаю, когда все потоки процесса одновременно выполняют функцию закрытия потока ExitThread (), либо потоки закрываются извне вызовом функции TerminateThread (). Обнаружив, что все потоки процесса не выполняются, система завершает и сам процесс с кодом завершения, равным коду завершения последнего потока процесса.

Во всех четырех случаях завершения процесса, в системе выполняются дополнительно следующие действия:

1. Выполнение всех потоков прекращается;

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

3. Формируется код завершения процесса;

4. Объект ядра «процесс» переходит в так называемое свободное состояние, и значение счетчика числа пользователей этого объекта уменьшается на единицу. Связанный с завершаемым процессом объект ядра полностью не освобождается до тех пор, пока не будут закрыты ссылки на него из других процессов, если эти ссылки создавались. Как только состояние счетчика числа пользователей объекта ядра становится равным нулю, объект полностью освобождается. Это событие произойдет тогда, когда все другие процессы, открывшие у себя дескриптор завершаемого процесса, вызовут функцию CloseHandle (), и тем самым сообщат системе о том, что ссылка на данный процесс больше не требуется.


<== предыдущая страница | следующая страница ==>
Создание процессов | Общие сведения о потоках. Создание потоков

Дата добавления: 2014-10-10; просмотров: 385; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.005 сек.